[unity] c# 扩展知识点其一 【个人复习笔记/有不足之处欢迎斧正/侵删】

.NET

微软的.Net既不是编程语言也不是框架,是类似于互联网时代、次时代、21世纪、信息时代之类的宣传口号,是一整套技术体系的统称,或者说是微软提供的技术平台的代号.

1.跨语言
只要是面向.NET平台的编程语言(C#、VB、 C++、 F#等等),用其中一种语言编写的内容可以无缝地用在另一种语言编写的应用程序中

CLS:一种语言互操作的便准规范

CLI :公共语言基础结构。是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准


2.跨平台
一次编译, 不需要任何代码修改,应用程序就可以运行在任意有.NET框架实现的操作系统上,即代码不依赖于操作系统,也不依赖硬件环境

.net Framework:

体系结构

制作应用程序
编程语言+调用各种类库进行开发生成程序集
        1.只要支持CLS公共语言规范的语言都可以用于开发Windows下的各种应用程序和网站程序
        2.BCL (基础类库)和FCL (框架类库)是这个框架体系中为我们实现好的各种API
        3.程序集的表现就是后缀为.dll或者exe格式的文件

.Net Framework是一个主要用于跨语言开发Windows操作系统下的应用程序的框架结构,并不支持跨平台

.net Core

 是.Net Framework的翻版实现,它是一个开源项目,是基于.Net Framework来进行设计的主要目的就是跨平台,是.Net技术框架组成在Windows、MacOS、 类Linux系统 下的具体实现

Mono

相对.Net FrameWork最大的区别就是具备跨平台的能力,不仅可以运行在Windows、MacOS、Linux等操作系统,甚至还可以运行在PS3、XBOX、Wii等主机平台上

Mono与Unity

Unity Engine  :
提供UnityEngine.dlI动态库,各平台不同,C/C+ +编写,包含平台相关代码、图形API、物理引擎、灯光等等所有游戏引擎底层内容
Unity Editor (编辑器)
提供UnityEditor.dII动态库,大部分由C#编写,用户脚本最初可以使用C#、JavaScript、Boo语言编写, 项目代码最后由Mono编译

Mono主要构成部分:
1.C#编译器(mcs)
2.Mono Runtime类似CLR公共语言运行时(虚拟机)包括JIT (Just in time)即时编译器、AOT (Ahead of time)提前编译器、GC、类库加载器等等
3.BCL基础类库
4.Mono类库:提供很多超出.Net的一些额外功能,主要用于构建各种操作系统上的应用

C# 命名与可选参数、动态类型语法

Test(f:3.3f ,i:5 ,b:false);
//每个参数可以按照参数名字进行指定public void Test(int i,float f,bool b){}//可以配合可选参数的使用,跳过一些默认参数,直接赋值后面的默认参数
lu(1,s:"234");
public void lu(int i,bool b=false,string s="456"){}//动态类型
//dynamic 只在编译时存在,运行时不存在
//需要将UNity的.NET API兼容级别切换到.NET 4.x
//IL2CPP不支持C# dynamic关键字 ,且无法自动补全dynamic dyn =1;
object ji=2;
print(ji.GetType());
print(dyn.GetType());
//输出都是INT32

线程与线程池

UNITY中的线程:

        1. Unity支持多线程
        2. Unity中开启的多线程不能使用主线程中的对象
        3. Unity中开启多线程后一定要关闭

Thread t = new Thread (()=>{while(true){print("HFUTER");Thread.Sleep(1000);}});t.Start();

线程池

命名空间:System.Threading

类名:ThreadPool(线程池)

ThreadPool中有若干数量的线程,如果有任务需要处理时,会从线程池中获取个空闲的线程来执行任务,任务执行完毕后线程不会销毁,而是被线程池回收以供后续任务使用。当线程池中所有的线程都在忙碌时,又有新任务要处理时,线程池才会新建一个线程来处理该任务 ,如果线程数量达到设置的最大值,任务会排队,等待其他任务释放线程后再执行,线程池能减少线程的创建,节省开销,可以减少GC垃圾回收的触发

但是不能控制线程池中线程的执行顾序,也不能获取线程池内线程取消/异常/完成的通知

//获取可用的工作线程数和I/O线程数
int num1;
int num2;
ThreadPool.GetAvailableThreads(out num1,out num2);//获取最大可用的工作线程数和I/O线程数
ThreadPool.GetMaxThreads(out num1,out num2);ThreadPool.SetMaxThreads(20,20);
//设置最多开20个线程ThreadPool.GetMaxThreads(out nums1,out num2);

(线程池里的线程 就是一个个没有运行的 线程对象不存在关闭这一说)

Task 任务类

Task是在线程池基础上进行的改进,拥有线程池的优点,解决了使用线程池不易控制的弊端
是基于线程池的优点对线程的封装,可以更方便高效的进行多线程开发
一个Task对象就是一个线程

 创建Task

//无返回值
Task t1 =new Task(()=>{while(true){print("HFUTER");
Thread.Sleep(1000);
//1s
}
});
//是基于线程池规则的Task t2 =Task.Run(()=>{while(true){print("HFUTER2");
Thread.Sleep(1000);
//1s
}
});Task.Factory.StartNew(()=>{while(true){print("HFUTER3");
Thread.Sleep(1000);
//1s
}
});//有返回值
Task <int>t11 =new Task<int>(()=>{while(true){print("HFUTER");
Thread.Sleep(1000);
//1s
}
return 1;
});Task<string> t21 =Task.Run<string>(()=>{while(true){print("HFUTER2");
Thread.Sleep(1000);
//1s
}
return "yuan";
});Task<float>t33 = Task.Factory.StartNew<float>(()=>{while(true){print("HFUTER3");
Thread.Sleep(1000);
//1s
}return 4.5f;
});

注意:Result获取结果时会阻塞线程

//同步执行
Task t =new Task(()=>{Thread.Sleep(1000);
});
t.RunSynchronously();//wait方法,等待任务执行完毕,再执行后面的内容
Task lu =new Task(()=>{Thread.Sleep(1000);
});Task ji =new Task(()=>{Thread.Sleep(1000);
});lu.Wait();//WaitAny
Task.WaitAny(lu,ji);
//至少一个任务完成才会执行后面的逻辑

异步方法async和await

async和await一般需要配合Task进行使用
async用于修饰函数、lambda表达式、 匿名函数
await用于在函数中和async配对使用,主要作用是等待某个逻辑结束,此时逻辑会返回函数外部继续执行,直到等待的内容执行结束后,再继续执行异步函数内部逻辑
在一 个async异步函数中可以有多个await等待关键字

public async void TestAsync(){print("123");
//不能使用ref和out关键字await Task.Run(()=>{});}

资源异步加载可以是使用async和await

不过unity大部分异步加载方式不支持async和await(c# 5 才推出的功能,老的异步加载内容不兼容)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带着问题阅读源码——Spring MVC是如何将url注册到RequestMappingHandlerMapping?

背景 在 Spring MVC 中&#xff0c;DispatcherServlet 是前端控制器&#xff08;front controller&#xff09;&#xff0c;它负责接收所有的 HTTP 请求并将它们映射到相应的处理器&#xff08;handler&#xff09;。为了实现这一点&#xff0c;Spring MVC 使用了适配器模式将…

大街款商城项目03-微服务之间调用

目录 RestTemplate OpenFeign 1.引入依赖open-feign 2.声明要调用的服务和接口 3.注入FeignClient启用 4验证 RestTemplate 在微服务架构中&#xff0c;使用RestTemplate是一种常见的方式进行服务间的HTTP通信。以下是一个简单的示例&#xff0c;演示如何使用RestTempla…

Android minigbm框架普法

Android minigbm框架普法 引言 假设存在这么一个场景&#xff0c;我的GPU的上层实现走的不是标准的Mesa接口&#xff0c;且GPU也没有提专门配套的gralloc和hwcompoer实现。那么我们的Android要怎么使用到EGL和GLES库呢&#xff0c;并且此GPU驱动是支持drm实现的&#xff0c;也有…

Galaxy生信云平台:集合操作工具大全

Galaxy平台上的文件称为数据集&#xff08;Dataset&#xff09;&#xff0c;如果将多个文件组合在一起&#xff0c;则形成数据集合&#xff08;Dataset collection&#xff09;。 上传文件后&#xff0c;可以通过工具将文件构建成数据集合。具体操作可以参考前面介绍转录组流程…

后台组件体系

从今天开始进入更细粒度说明。后台微服务是由组件构成的。平台的开发理念是为甲方打造一个生态环境。安装实施时为客户安装私仓来管理组件。开发微服务时鼓励拆分为组件。开发新功能时&#xff0c;先看有没有相关组件&#xff0c;有的话就在pom.xml文件&#xff08;不要问我这个…

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件…

什么是端点安全以及如何保护端点

什么是端点安全 端点是指可以接收信号的任何设备&#xff0c;是员工使用的一种计算设备&#xff0c;用于保存公司数据或可以访问 Internet。端点的几个示例包括&#xff1a;服务器、工作站&#xff08;台式机和笔记本电脑&#xff09;、移动设备、虚拟机、平板电脑、物联网、可…

一【初识EMC】

在作为硬件行业相关从业者&#xff0c;经常接触到EMC相关问题&#xff0c;下面来简单介绍下EMC相关方面的知识 文章目录 前言一、生活中的EMC现象&#xff1f;二、EMC是什么三、EMC的三要素四、EMI与EMS的评估方式1.RE2.CE3.HAR4.FLICKER5.Rs6.CS7.ESD8.EFT9.DIP10.PMS11.surge…

Zookeeper3:客户端命令

文章目录 客户端命令连接服务端Zookeeper客户端内置命令 ls - 节点信息 客户端命令 连接服务端Zookeeper //客户端连接服务端zookeeper 默认连的本机2181端口的zookeeper cd /opt/module/zookeeper-3.9.1/bin && sh zkCli.sh//客户端连接远程服务端zookeeper cd /op…

【小尘送书-第十一期】编程的基石,开发的核心:《算法秘籍》

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

如何使用GAP-Burp-Extension扫描潜在的参数和节点

关于GAP-Burp-Extension GAP-Burp-Extension是一款功能强大的Burp扩展&#xff0c;该工具在getAllParams扩展的基础上进行了升级&#xff0c;该工具不仅可以帮助广大研究人员在安全审计过程中扫描潜在的参数&#xff0c;而且还可以搜索潜在的链接并使用这些参数进行测试&#…

零基础如何快速入门伦敦金交易

伦敦金交易是金融市场中备受关注的一种投资方式。对于想要学习如何炒伦敦金并快速开始交易的人来说&#xff0c;本文将为您提供一份全面而详细的指南。无论您是初学者还是有经验的交易者&#xff0c;本文都将帮助您了解伦敦金交易的基本知识&#xff0c;并提供一些实用的技巧和…

协议-http协议-基础概念03-http状态码-http特点-http性能-压缩和分块传输-范围请求

参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-状态码分类 开头的 Version 部分是 HTTP 协议的版本号&#xff0c;通常是HTTP/1.1&#xff0c;用处不是很大。后面的 Reason 部分是原因短语&#xff0c;是状态码的简短文字描述&#xff…

每周一算法:双向广搜

题目链接 字符串变换 题目描述 已知有两个字串 A , B A,B A,B&#xff0c;及一组字串变换的规则&#xff08;至多 6 6 6个规则&#xff09;: A 1 → B 1 A_1→B_1 A1​→B1​ A 2 → B 2 A_2→B_2 A2​→B2​ … 规则的含义为&#xff1a;在 A A A中的子串 A 1 A_1 A1​…

pytorch统计属性

目录 1.normal2. mean, sum, min, max, prod3.argmin, argmax4. topk kthvalue5. compare 1.normal torch.normal(mean, std, *, generatorNone, outNone) → Tensor返回一个张量&#xff0c;其中的每个元素随机来自独立的标准正态分布。这些分布具有给定的均值和标准差。 参数…

【cmu15445c++入门】(13)C++的std::promise

一、说明 std::promise 是C11并发编程中常用的一个类&#xff0c;常配合std::future使用。其作用是在一个线程t1中保存一个类型typename T的值&#xff0c;可供相绑定的std::future对象在另一线程t2中获取 二、代码 #include <chrono> #include <future> #includ…

Hive SQL 开发指南(二)使用(DDL、DML,DQL)

在大数据领域&#xff0c;Hive SQL 是一种常用的查询语言&#xff0c;用于在 Hadoop上进行数据分析和处理。为了确保代码的可读性、维护性和性能&#xff0c;制定一套规范化的 Hive SQL 开发规范至关重要。本文将介绍 Hive SQL 的基础知识&#xff0c;并提供一些规范化的开发指…

如何安装ProtoBuf环境

1 &#x1f351;下载 ProtoBuf&#x1f351; 下载 ProtoBuf 前⼀定要安装依赖库&#xff1a;autoconf automake libtool curl make g unzip 如未安装&#xff0c;安装命令如下&#xff1a; Ubuntu ⽤⼾选择&#xff1a; sudo apt-get install autoconf automake libtool cur…

Unity 向量计算、欧拉角与四元数转换、输出文本、告警、错误、修改时间、定时器、路径、

using System.Collections; using System.Collections.Generic; using UnityEngine;public class c2 : MonoBehaviour {// 定时器float t1 0;void Start(){// 向量Vector3 v1 new Vector3(0, 0, 2);Vector3 v2 new Vector3(0, 0, 3);// 计算两个向量的夹角Debug.Log(Vector3…

Java 学习和实践笔记(26):组合(component)的含义以及与继承(extends)的关系

组合的两个作用&#xff1a; 1&#xff09;通过将父类对象作为子类的属性 2&#xff09;通过第1点的作用&#xff0c;实现了代码复用。 示例代码&#xff1a; public class TestComponent {public static void main(String[] args) {Student2 s1 new Student2("jason&…