C#四部曲(知识补充)

Unity跨平台原理

.Net相关

只要编写的时候遵循.NET的这些规则,就能在.NET平台下通用

各种源码→根据.NET规范编写→(虚拟机)生成CIL中间码(保存在程序集中)→转成操作系统原代码

跨语言←   跨平台↓

Unity跨平台原理(Mono)

c#脚本→MonoC#编译器→IL中间代码→monoRunTIme虚拟机→操作系统原生代码

Unity跨平台原理(IL2CPP)

跨平台总结

各种源码→根据.NET规范编写→(虚拟机)生成CIL中间码(保存在程序集中)→转成操作系统原代码

   跨语言 ↑   跨平台 ↓ 

(Mono)c#脚本→MonoC#编译器→IL中间代码→monoRunTIme虚拟机→操作系统原生代码

(IL2CPP)mono直接将中间代码转原生代码。IL2CPP先将中间码转C++,再转原生码

 

*IL2CPP模式可能存在的问题处理

新版本有一个minimal ,比low还要小。       最大测试程度,直接选Hight打包,看抱不报错

如果报错,再创建这个Link.xml 去配置 。配置规则,用到了再来查。上面是注释下面是方法

 下面是没有被裁剪,但它本身是泛型的时

 c虽然没有被使用,但它被存在这个类里。所以不会被剥离

二、

我想保留IL2类中的Test方法,只要在这个静态test中使用它一次。  test本身是永远不会被调用的

一个保留泛型类,一个保留泛型方法。

C#各版本新功能和语法

命名可选参数、动态类型

原来需要按顺序传参数,现在写出参数名字,后面跟: 就可以不按规则顺序来传参数

在这种有默认值的函数,甚至可以少些一些参数(前提是你就是要用它的默认值)

线程池

引入命名空间

复习:

记得关闭。数据不互通此时停止Unity线程不会停止这时停止运行,线程才会跟着停止。与主线程数据不互通

线程池:

获取可用的线程数。获取最大的、设置可以同时开启的线程数。比如只能同时开20个    返回一个bool

最大设为20后,第21个不会被创建,它只会等,等到有空位。   

最小的也可以得到、设置

比如min10,max12. 我此时有11. 这时又排进来一个12,因为还没到达最大值,就会创建一个新的线程给12用。  再排进来一个13,因为已经超过MAx,所以不会再新创建,而是排队等空余。

从线程池里取出来一个线程用来执行该方法,也就是把方法加入线程池的排队队列

此时obj是空,如果加一个参数↓ 那么obj就会是这个参数

 *Task任务类

这种方法直接就运行,不需要Start

无返回值↑  有返回值 return↓

想返回什么类型,就填什么类型。其他方法类似

解决方法,主线程中获取Result返回值时停止循环。

异步执行↑ 同步执行↓  Task t =new Task    t.RunSynchronously();

Task t =new Task (Action)

     t.wait()         Task.WaitAny(t1,t2)       Task.WaitAll(t1,t2)     & |

一个&条件,一个|条件   

wait和when,一个群伤一个单体这么理解就好了

通过申明一个这个对象,用它里面的标识符替换用来的bool值(默认是false)

好处是里面有更多功能给我们用延迟取消

*异步方法Async、Await

Asunc其他地方还是同步执行,只有被Await修饰的地方才是异步

你写异步方法的时候就应该习惯用Async结尾              可以带参,可以有返回值,但有限制

1/正常输出123,2/TestAsync挂起 主线程继续执行 等待2结束           3/  2中的Task执行结束,继续执行TestAsync中的3

线程间数据不互通,就像不同方法间参数不互通一样。

网络通信中也会用到这两个关键字

静态导入、异常筛选器、Nameof

  静态导入

 可以不再写类名

比如这里,只有当e这个错误当中的消息包含301时,才会执行后面的逻辑

可以用来给301、302、303等不同错误做区分

nameof使用场景其实比较少,可能配合异常捕获来告诉别人是那个位置(名字)出了错误

 这种情况用tostring就不合适了就可以用nameof

*_字面改进、弃元。out_

一看就知道是九亿如果有类型不同的重载就不能用不确定的匿名

本地函数、ref+临时+返回值

此时test1也变成了900  赋值变为引用

结构体同理

如果要用函数,则也需要ref关键字,return也要加

也没必要写修饰符

*元组、模式匹配

还有很多自带异常类

允许加入自定义类型     元组是值类型

  具体应用↓

弃元符号

模式匹配:

可以直接判断是不是这个值             可以判空                          是int 则直接赋值进i 

switch也可以存,判断条件更多

匿名用的比较少。只是把v存成和o一样的类型

静态本地函数、Using、Null赋值合并、Deconstruct

相当于本地函数不能使用上层函数

此时想要再使用就只能通过传参,

首先得保证using对象有Dispose这个方法

继承这个接口重写该方法,释放逻辑自己定

这种写法,只有在其上层函数结束时才会释放该对象


        a = b?? "1";       a=b,b为空则a=1                a ??= "1";      a为空则=1

解构函数:

因为一个类对象实际是引用类型,直接赋值会造成地址上的关联。而解构函数可以只取出变量值

解构函数可以有多个,每个参数不同,相当于重载一样。这样外面不管什么形式的元组都可以获取

申明一个p,且单独把其中的变量值提取出来

模式匹配增强

判断这个对象的属性是不是这个值,那个属性是不是那个值↑  结合使用↓

你要用传统的写也可以。

配合Switch,可以判断多个条件的满足情况。加分号。   元组则不需要数据结构类

可以连变量名都省略

when关键字可以配合switch使用,要同时满足多个条件,这里抛砖引玉

顶级语法

C#其他功能

时间戳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/452405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低压线性恒流LED恒流驱动芯片SM15633EH:用于洗墙灯和线条灯

洗墙灯和线条灯是两种常见的LED照明产品,它们都需要使用LED恒流驱动芯片来确保稳定、可靠的电流供应,从而保证LED的使用寿命和亮度。 对于洗墙灯而言,由于其发出的光线需要覆盖较大的区域,因此需要使用较大功率的LED芯片&#xf…

Linux操作系统与Windows文件互传(FTP)

一、开启Ubuntu下的FTP服务 打开Ubuntu的终端窗口,然后执行如下命令来安装 FTP服务。 sudo apt-get install vsftpd等待软件安装完成后,用输入以下命令打开vsftpd.conf文件 sudo vim /etc/vsftpd.conf 找到下图的两个使能语句改成如图即可(记住保存后再…

新版哥白尼系统快速下载哨兵数据

在新版哥白尼系统下载数据,总是failed或者速度很慢,如何实现MB/s的下载速度,只需要四步就可以解决: 1 登录系统,找到想下载的数据,点开product info按扭,​​​​​​ 2. 找到数据的Product id和Name, #Product id:https://zipper.dataspace.copernicus.eu/odata/v1/P…

Selenium操作浏览器,弹出文件选择框,实现自动选定“目标文件”

前言 本文是该专栏的第20篇,后面会持续分享python爬虫干货知识,记得关注。 我们在使用selenium操作目标页面的时候,可能会遇到如下图所示的情景。 在用selenium操作并点击页面元素的时候,会弹出一个文件选择框,需要我们选择目标文件,并点击确认按钮,目标文件才能上传成…

Stream-JDK8

Stream概念 代码示例 package com.zz.stream;import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors;/*** 使用Stream流* 找出姓张并且是三个字的名字*/ public class Test {public static void main(Stri…

cesiumlab白模效果一

效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度,如果shp面中有高度字段,可以用高度字段,如果没有,可以用固定高度 设置贴图,这边用的是第二张效果,当然也可以用自己的贴图…

‘UnityEngine.Application‘ does not contain a definition for isBatchMode

unity 2017.4.37f1. 解决办法: Try to replace Application.isBatchMode with UnityEditorInternal.InternalEditorUtility.inBatchMode

MySQL实战:问题排查与监控

常见问题 有更合适的索引不走,怎么办? MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即…

AI新工具(20240312) Midjourney官方发布角色一致性功能;免费且开源的简历制作工具;精确克隆语调、控制声音风格

1: Midjourney角色一致性功能 使人物画像在多方面高度一致成为可能。 Midjourney的角色一致性功能的使用方法如下: ⭐在你的输入指令后面加上 --cref URL,其中URL是你选择的角色图像的链接。 ⭐你可以通过 --cw 参数来调整参照的强度,范围…

Selenium控制已运行的Edge和Chrome浏览器(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器 3. 爬取效果3. 完整代码共享3.1 包含Excel部分的…

旅游景区公共广播 园区广播 公路服务区广播

旅游景区公共广播 园区广播 公路服务区广播 旅游景区公共广播 旅游景区公共广播(又称背景音乐)简称BGM,它的主要作用是掩盖噪声并创造一种轻松和谐的气氛,是一种创造轻松愉快环境气氛的音乐。掩盖环境噪声,创造与旅游景区相适应的气氛&#…

ubuntu20.04上获取Livox Avia雷达点云数据

若拿到手的Livox Avia激光雷达不知道它的ip信息,可以在官网上LiDAR Sensors - Livox下载上位机软件Livox Viewer,查看IP,下载window版本就可以。雷达通过网线连上电脑后,该软件就可以自动识别出来。按照下图步骤,就可以…

自动化运维工具---------------ANSIBLE

一、Ansible 发展史及功能 作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2…

遥感云计算的一个拐点

GeoForge,一个值得关注的遥感大数据应用 简介 GeoForge是由Ageospatial公司开发的一个基于大语言模型(GeoLLMs)的地理空间分析平台。GeoForg的目的是使每个人都可以轻松进行地图绘制和地理空间分析,无论您是外行还是专家。 Geo for ChatGPT 作者团队已…

Extropic.AI:终结GPU/TPU的热力学未来Chip?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

一台GTX1080显卡的怪兽,我可不能错过这个机会!

标题:我花了30块钱买了一台电脑主机。 这个配置能赚钱吗? 1. 收购惊喜 那是一个阳光明媚的下午,我在水管修理店里闲逛。 突然,一位老顾客手里拿着一台旧电脑主机匆匆走了进来。 他说:“小王,你能帮我看看…

芯片电源设计原则

一、芯片供电 每路电源都要求在一定范围内。每路电源都有允许的输入电压范围。可能需求多路电源;可能分模块供给。 不同模块对电源质量的要求可能不同。有些模块可能较为敏感,抗扰度低。有些模块可能容易干扰其他模块。 电源分配网络存在一定电感&…

07-java基础-锁之AQSReentrantLockBlockingQueueCountDownLatchSemapho

文章目录 0:AQS简介-常见面试题AQS具备特性state表示资源的可用状态AQS定义两种资源共享方式AQS定义两种队列自定义同步器实现时主要实现以下几种方法:同步等待队列条件等待队列 1:AQS应用之ReentrantLockReentrantLock如何实现synchronized不…

string的使用

前言 我们前面已经介绍了C的基本知识,本期开始我们将进入C的第二部分,也是非常重要的一个部分!他就是STL!本期我们来先介绍string及其使用! 本期内容介绍 STL介绍 为什么要学习string? string的常用接口介绍 一、ST…

【Twinmotion】Twinmotion导入UE5

步骤 1. 在虚幻商城中安装“Datasmith Twinmotion导入器插件” 安装“面向虚幻引擎的Twinmotion内容” 2. 打开虚幻引擎,在插件中搜索“twinmotion”,勾选如下两个插件,然后重启虚幻引擎 3. 打开Twinmotion,随便添加一个物体 导出…