最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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# 高級語法特性(二)的評論 (共 條)

分享到微博請遵守國家法律
罗甸县| 屏南县| 盐边县| 湘阴县| 荔波县| 大石桥市| 偃师市| 丰都县| 龙陵县| 黔南| 呼和浩特市| 北安市| 博罗县| 眉山市| 瑞丽市| 凤庆县| 海丰县| 方城县| 射阳县| 乌海市| 大厂| 大关县| 特克斯县| 石楼县| 扎兰屯市| 襄垣县| 陇西县| 什邡市| 长宁县| 博兴县| 常山县| 白沙| 蕉岭县| 莱阳市| 柏乡县| 玉树县| 宣恩县| 奈曼旗| 田阳县| 涿鹿县| 和政县|