国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C# 高級語法特性(二)

2023-07-05 17:01 作者:寧牁兒  | 我要投稿

1.0版本包含了C#語言最核心的部分,但僅有這些,會發(fā)現(xiàn)在實際開發(fā)中會遇到很多麻煩事,語言版本的迭代也是基于這些考慮在原有版本的基礎(chǔ)上加入一些新特性,使得編程語言在處理一些問題上更加高效、方便、簡潔和增強代碼靈活性。

C# 2.0

羅列一下2.0版本主要提供的特性:

  • 泛型

  • partial

  • 匿名方法

  • 迭代器

  • 協(xié)變和逆變

  • 靜態(tài)類

  • 委托判斷

泛型

泛型基本用法無需再贅述,與其它編程語言的泛型機制差別不大,泛型用的比較多的地方是底層、通用的模塊。在設(shè)計一些框架或者庫的底層時,對泛型類、泛型接口要求會比較高(包括逆變和協(xié)變),一般的開發(fā)其實無需過于深入理解泛型設(shè)計。

分部類型partial

微軟官方文檔指出partial關(guān)鍵字設(shè)計是用來把一個類的職責(zé)拆分給不同的開發(fā)者,而在Unity中,通常用于提供給UI類拆分出ViewController的職責(zé)。例如拆分出UI.csUI.Designer.cs

UI.cs(Controller的職責(zé)):

public partial class UI{
???????void Init(){}
? ? ? ?void Start(){}
? ? ? ?...
}

UI.Designer.cs(View的職責(zé)):

public partial class UI{
? ? ? ?public Button Button;
? ? ? ?public Text Text;
? ? ? ?...
}

另外,在一個包含大量成員的靜態(tài)類中使用partial,可以將它們拆分到不同的文件中,看起來可能會是:

StaticClass.XXX.cs:

public static partial class StaticClass{
? ? ? ?public static X;
? ? ? ?...
}

StaticClass.YYY.cs:

public static partial class StaticClass{
? ? ? ?public static Y;
? ? ? ?...
}

迭代器

多花一些篇幅討論迭代器,基本形式看起來會是:

????// IEnumerable接口定義
????public interface IEnumerable{
? ?????IEnumerator GetEnumerator();
????}

????// IEnumerator接口定義
????public interface IEnumerator{
? ?????bool MoveNext();
? ?????object Current{get;}
? ?????void Reset();
????}

????// 第一種形式
????public class EnumClass : MonoBehaviour{
? ???????void Start(){
?????????????foreach(var v in EnumValue()){
? ? ? ? ? ?????Debug.Log(v); // 將輸出1 2 3
? ? ? ???????}
? ?????? }
? ???????IEnumerable EnumValue(){
? ? ? ?????yield return 1;
? ? ? ?????yield return 2;
? ? ? ?????yield return 3;
? ?????? }
????}

// 第二種形式
class EnumClass : IEnumerable
{
? ?public IEnumerator GetEnumerator()
? ?{
? ? ? ?yield return 1;
? ? ? ?yield return 2;
? ? ? ?yield return 3;
? ?}
}

void Start()
{
? ?foreach(var e in new EnumClass())
? ?{
? ? ? Debug.Log(e);
? ?}
? ?// foreach 同等實現(xiàn)
? ?var e = new EnumClass().GetEnumerator();
? ?while(e.MoveNext()){
? ? ? ?Debug.Log(e.Current);
? ?}
}

????yield關(guān)鍵字本質(zhì)是語法糖,其實是編譯器自動實現(xiàn)IEnumerator等接口方法的關(guān)鍵字。

Coroutine

首先在此利用Unity中的Update()方法模擬Coroutine:

???...
? ?IEnumerator e; // 獲取到某個IEnumerator
? ?void Update(){
? ? ? ?if(e.MoveNext()){
? ? ? ? ? ?...
? ? ? ?}
? ?}

Update()方法將會在每一幀輸出迭代器中的內(nèi)容,再使用StartCoroutine()方法啟動協(xié)程:

StartCoroutine(e); // StartCoroutine方法會不停地調(diào)用MoveNext()方法直到結(jié)束

會發(fā)現(xiàn)兩者效果一樣,可以推斷Unity也是通過枚舉來運行程序塊的。Coroutine則其實是一個迭代器模式+定時器的一種實現(xiàn)。

靜態(tài)類

靜態(tài)類稍微一提,關(guān)鍵的兩點:

  1. 不能被實例化

  2. 靜態(tài)構(gòu)造函數(shù)在靜態(tài)類成員被第一次訪問時調(diào)用

2.0中其它新特性,如匿名方法、可空值類型、getter/setter單獨可訪問性、委托判斷,目前我覺得沒有什么需要說明的地方,一般的開發(fā)過程中也沒有遇到什么相關(guān)問題。


C# 高級語法特性(二)的評論 (共 條)

分享到微博請遵守國家法律
象州县| 五河县| 乌鲁木齐市| 宁国市| 巧家县| 区。| 改则县| 巴彦淖尔市| 岑巩县| 郧西县| 通州市| 东乡族自治县| 铁力市| 太仆寺旗| 丁青县| 上饶市| 陵川县| 岳池县| 漠河县| 莲花县| 富蕴县| 河池市| 商都县| 古丈县| 迁西县| 泸溪县| 江城| 将乐县| 南华县| 荃湾区| 高安市| 巴青县| 香河县| 宁都县| 海丰县| 乌兰县| 呼和浩特市| 柘城县| 武宣县| 合水县| 凤台县|