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

本文主要是介绍[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 才推出的功能,老的异步加载内容不兼容)

这篇关于[unity] c# 扩展知识点其一 【个人复习笔记/有不足之处欢迎斧正/侵删】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766274

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear