[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.pswp.cn/news/713417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713417.shtml
英文地址,請注明出處:http://en.pswp.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;不要問我這個…

OpenDDS中避免訂閱發布同一主題時的自環現象(適用于所有DDS)

目錄 1、摘要2、理解"自反傳輸"2、解決方案2.1、使用 DataReaderListener 進行過濾3.2、使用 Partition 進行隔離3.3、 使用不同的 Topic 總結 1、摘要 在 OpenDDS 中&#xff0c;同時訂閱并發布同一主題會導致自環現象&#xff0c;即接收到自己發送的消息。本文介紹…

Day10:基礎入門-HTTP數據包Postman構造請求方法請求頭修改狀態碼判斷

目錄 數據-方法&頭部&狀態碼 案例-文件探針 案例-登錄爆破 工具-Postman自構造使用 思維導圖 章節知識點&#xff1a; 應用架構&#xff1a;Web/APP/云應用/三方服務/負載均衡等 安全產品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墻/殺毒等 滲透命令&#xff1a;文件…

最新消息:英特爾宣布成立全新獨立運營的FPGA公司——Altera

今天&#xff0c;英特爾宣布成立全新獨立運營的FPGA公司——Altera&#xff08;2015年6月Intel以 167 億美元的價格&#xff0c;收購FPGA廠商Altera&#xff09;。首席執行官Sandra Rivera和首席運營官Shannon Poulin分享展示其在超過550億美元的市場中保持領先性的戰略規劃&am…

什么是端點安全以及如何保護端點

什么是端點安全 端點是指可以接收信號的任何設備&#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…

R語言簡介|你對R語言了解多少?

R語言是一種專門用于統計計算和圖形展示的開源編程語言&#xff0c;它在數據科學領域有著廣泛的應用。下面對R語言的環境、基礎語法及注釋進行解釋&#xff1a; R語言環境 安裝與配置 安裝R語言通常可以從官方站點下載對應操作系統的安裝包&#xff0c;如Windows、Linux、ma…

lotus worker停止接單

worker停止接單 會做完當前的任務 lotus-worker set --enabledfalse# lotus-worker --worker-repo/worker01 set --enabledfalse DEPRECATED: This command will be removed in the future# lotus-worker --worker-repo/worker01 info Enabled: false參考 worker停止接單

如何使用GAP-Burp-Extension掃描潛在的參數和節點

關于GAP-Burp-Extension GAP-Burp-Extension是一款功能強大的Burp擴展&#xff0c;該工具在getAllParams擴展的基礎上進行了升級&#xff0c;該工具不僅可以幫助廣大研究人員在安全審計過程中掃描潛在的參數&#xff0c;而且還可以搜索潛在的鏈接并使用這些參數進行測試&#…

零基礎如何快速入門倫敦金交易

倫敦金交易是金融市場中備受關注的一種投資方式。對于想要學習如何炒倫敦金并快速開始交易的人來說&#xff0c;本文將為您提供一份全面而詳細的指南。無論您是初學者還是有經驗的交易者&#xff0c;本文都將幫助您了解倫敦金交易的基本知識&#xff0c;并提供一些實用的技巧和…

安卓與鴻蒙的區別

安卓和鴻蒙是兩個不同的操作系統。下面是它們的一些區別&#xff1a; 1. 公司&#xff1a;安卓是由谷歌開發的操作系統&#xff0c;而鴻蒙是由華為開發的操作系統。 2. 開放性&#xff1a;安卓是開放源代碼的操作系統&#xff0c;可以由各種手機制造商進行定制和使用。鴻蒙也…

協議-http協議-基礎概念03-http狀態碼-http特點-http性能-壓縮和分塊傳輸-范圍請求

參考來源&#xff1a; 極客時間-透視HTTP協議(作者&#xff1a;羅劍鋒)&#xff1b; 01-狀態碼分類 開頭的 Version 部分是 HTTP 協議的版本號&#xff0c;通常是HTTP/1.1&#xff0c;用處不是很大。后面的 Reason 部分是原因短語&#xff0c;是狀態碼的簡短文字描述&#xff…

04鎖機制-分布式鎖

一句話導讀 分布式鎖是一種在分布式系統中實現對共享資源的訪問控制的鎖機制&#xff0c;它可以確保在不同的節點上只有一個線程能夠獲取鎖&#xff0c;從而避免了分布式環境下的并發訪問問題 目錄 一句話導讀 一、什么是分布式鎖 二、實現分布式鎖的方式 1.基于數據庫實現…

【Redis】高級特性 - 發布和訂閱

文章目錄 1. 發布/訂閱模式概述2. 在Redis中使用發布/訂閱模式2.1 發布消息2.2 訂閱頻道2.3 接收消息 3. 示例演練3.1 啟動兩個Redis客戶端3.2 發布者發布消息3.3 訂閱者接收消息 4. 取消訂閱5. 發布/訂閱模式的優勢結語 在Redis的學習中&#xff0c;發布/訂閱&#xff08;Pub/…