国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#的一些知識(shí)點(diǎn)

2019-11-17 02:37:01
字體:
供稿:網(wǎng)友
C#的一些知識(shí)點(diǎn)

不能將屬性以ref或out的方式傳遞

看上去屬性和字段差不多,可是屬性本質(zhì)上是個(gè)方法,并不是真正指向一個(gè)內(nèi)存位置,所以不能像字段那樣能以ref或out方式傳遞。

Lookup運(yùn)行一個(gè)鍵對應(yīng)多個(gè)值,但無法直接創(chuàng)建,衹能通過ToLookup方法

 

原生的值類型調(diào)用ToString方法是不會(huì)裝箱的

比較"Age = " + 3.ToString()和"Age = " + 3,前者要比後者高效,因爲(wèi)後者默認(rèn)會(huì)裝箱。所以值類型涉及字符串操作時(shí),應(yīng)該總是使用ToString方法

 

用R格式化字符串,可以保留精度

const double number = 1.618033988749895;            string text = string.Format("{0}", number);            double result = double.Parse(text);            bool same = result == number;            text = string.Format("{0:R}", number);            result = double.Parse(text);            same = result == number;

前一個(gè)same爲(wèi)false,后一個(gè)爲(wèi)true

 

類型的協(xié)變和逆變

衹有接口和委托才能聲明這兩個(gè)特性,汎型類是不支持的(出於類型安全的考慮)。

協(xié)變用out來修飾,針對的是返回值,潛臺(tái)詞是:如果能返回父類,自然也能返回子類。

// Covariance.

IEnumerable<string> strings = new List<string>();

IEnumerable<object> objects = strings;

逆變用in來修飾,針對的是參數(shù),潛臺(tái)詞是:如果能傳入父類,自然也能傳入子類。

// Contravariant.

IComparer<object> objects = objectComparer;

IComparer<string> strings = objects;

 

衹讀字段無法直接賦值修改,但可以通過反射進(jìn)行修改

 

匿名類型的屬性是衹讀的;元祖類型的屬性也是衹讀的

這樣是爲(wèi)了防止匿名對象的HashCode發(fā)生改變

 

dynamic類型可以隱式轉(zhuǎn)換爲(wèi)其它類型,object則不行

如:dynamic d = 1; int i = d;

編譯器認(rèn)爲(wèi)dynamic上的任何操作都是合法的

 

字段內(nèi)聯(lián)初始化衹是一種簡化寫法,實(shí)際上初始化還是在構(gòu)造函數(shù)中進(jìn)行的

這也是爲(wèi)什麼值類型不允許字段內(nèi)聯(lián)初始化的原因,因爲(wèi)值類型不允許無參構(gòu)造函數(shù)

 

Lazy<T>實(shí)現(xiàn)延遲加載,調(diào)用其Value屬性時(shí)才會(huì)真正加載

 

不要定義值類型的靜態(tài)構(gòu)造器,因爲(wèi)CLR未必會(huì)調(diào)用

struct MyStruct    {        static MyStruct()        {//不會(huì)被調(diào)用            Console.WriteLine("MyStruct");        }        public int X;    }            MyStruct[] array = new MyStruct[2];            array[0].X = 2;

 

閉包

捕獲變量是從變量聲明就開始了,而捕獲的值是看調(diào)用委托時(shí)該變量是什麼值                var list = new List<Action>();             for (int i = 0; i < 5; i++)             {                 int cnt = i * 10;                 list.Add(delegate                 {                     Console.WriteLine(cnt);                     cnt++;                 });             }

            list[0]();             list[0]();             list[1](); 有5次循環(huán),cnt被聲明了5次,實(shí)際上就是有5個(gè)不同的捕獲變量,所以各個(gè)委托有各自獨(dú)立的捕獲值,輸出結(jié)果是0,1,10

但如果把變量聲明放在循環(huán)外,隻聲明一次:     int cnt;             for (int i = 0; i < 5; i++)             {                 cnt = i * 10; 那麼這些委托就共享同一個(gè)捕獲變量,而當(dāng)委托方法調(diào)用時(shí),由於cnt已經(jīng)被循環(huán)了5次,成爲(wèi)40,所以輸出結(jié)果是40,41,42


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大安市| 岫岩| 榆树市| 苍南县| 新邵县| 静乐县| 布拖县| 永宁县| 扬中市| 铅山县| 岱山县| 郎溪县| 黄浦区| 客服| 东城区| 新邵县| 砚山县| 阿拉善右旗| 甘南县| 普兰县| 崇义县| 合肥市| 洛川县| 连州市| 揭西县| 丹阳市| 迁安市| 尉犁县| 黄龙县| 新兴县| 天镇县| 华阴市| 中方县| 鸡泽县| 兴山县| 太仆寺旗| 嘉鱼县| 磐安县| 临安市| 六盘水市| 临洮县|