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

首頁 > 學院 > 開發設計 > 正文

C#特性之數據類型

2019-11-17 02:21:36
字體:
來源:轉載
供稿:網友

C#特性之數據類型

這篇文章主要通過演示類在不同發展中的不通過定義方法,來向讀者表述它們之間的區別和聯系。

在C#1時代,我們喜歡這樣定義類:

public class PRoduct    {        private string _name;        public string Name {            get { return _name; }        }        private decimal _price;        public decimal Price        {            get { return _price; }        }        public Product(string name, decimal price)        {            this._name = name;            this._price = price;        }        public static ArrayList GetArrayList()        {            ArrayList list = new ArrayList();            list.Add(new Product("WindowsPhone", 10m));            list.Add(new Product("Apple", 10m));            list.Add(new Product("Android", 10m));            return list;        }        public override string ToString()        {            return String.Format("{0}--{1}", _name, _price);        }    }

局限性:1、ArrayList沒有提供與其內部內容有關的編譯時信息,如果不慎寫錯,編譯器也不會出現任何提示;

2、代碼中為屬性提供了公共的取值方法,這意味著如果添加對應的賦值方法,那么賦值方法必須是共有的;

3、用于創建屬性和變量的代碼很復雜,這違背了我們進行封裝的原本意愿;

在C#2時代,我們喜歡這樣定義類:

public class Product    {        private string _name;        public string Name {            get { return _name; }            private set { _name = value; }        }        private decimal _price;        public decimal Price        {            get { return _price; }            private set { _price = value; }        }        public Product(string name, decimal price)        {            Name = name;            Price = price;        }        public static List<Product> GetArrayList()        {            List<Product> list = new List<Product>();            list.Add(new Product("WindowsPhone", 10m));            list.Add(new Product("Apple", 10m));            list.Add(new Product("Android", 10m));            return list;        }        public override string ToString()        {            return String.Format("{0}--{1}", Name, Price);        }    }

現在,屬性擁有了私有的賦值方法,并且它能非常聰明的“猜出”List<Product>是告知編譯器列表中只能包含Product。試圖將一個不同類型添加到列表中會造成編譯時錯誤,并且當你從列表中獲取結果時,也并不需要轉化結果的類型;有效的解決了C#1中的前兩個問題;

在C#3時代,我們喜歡這樣定義類:

public class Product    {        public string Name        {            get; private set;        }        public decimal Price        {            get; private set;        }        public Product(){}        public static List<Product> GetArrayList()        {            return new List<Product>()            {                new Product {Name = "WindowsPhone", Price = 10m},                new Product {Name = "Apple", Price = 10m},                new Product {Name = "Android", Price = 10m}            };        }        public override string ToString()        {            return String.Format("{0}--{1}", Name, Price);        }    }

發展到這個階段,我們可以很明顯的發現,不再有任何代碼(或者可見的變量)與屬性關聯,而且硬編碼的列表是以一種全然不同的方式構建,這樣一來,我們實際上是完全可以刪除就有的構造函數,但是外部代碼就不能再創建其他的產品實例。自動熟悉大大簡化了操作;

在C#4時代,我們喜歡這樣定義類:

public class Product    {        private readonly string _name;        public string Name        {            get { return _name; }        }        private readonly decimal _price;        public decimal Price        {            get { return _price; }        }        public Product(string name,decimal price)        {            this._name = name;            this._price = price;        }        public static List<Product> GetArrayList()        {            return new List<Product>()            {                new Product(name: "WindowsPhone", price: 10m),                new Product(name: "Apple", price: 10m),                new Product(name: "Android", price: 10m)            };        }        public override string ToString()        {            return String.Format("{0}--{1}", Name, Price);        }    }

在這個特定的示例中,C#4的特性的好處還不是很明顯,但當方法或構造函數包含多個參數時,它可以是代碼的含義更加清-特別是當參數類型相同,或某個參數為null時。當然,你可以選擇什么時候使用該特性,只在是代碼更好的理解時才指定參數的名稱;

總結:

C#1(只讀屬性,弱類型集合)------》C#2(私有屬性賦值方法,強類型集合)------》C#3(自動實現的熟悉,增強的集合和對象初始化)------》C#4(用命名實參更清晰的調用構造函數和方法)

注:由于C#5在這方面的特性表現的沒有太大變化,所以就不再表述。

如果你覺得這篇文章對你有所幫助,歡迎轉載,但請注明出處!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清苑县| 壶关县| 益阳市| 乌恰县| 玉屏| 平罗县| 仪征市| 蚌埠市| 上虞市| 博乐市| 金川县| 绥滨县| 怀集县| 阿鲁科尔沁旗| 驻马店市| 乐东| 阳西县| 普洱| 通江县| 定结县| 吴堡县| 丰宁| 深泽县| 英超| 侯马市| 克拉玛依市| 乌拉特前旗| 嵊泗县| 山东| 大悟县| 青浦区| 迭部县| 政和县| 双柏县| 广灵县| 长寿区| 辽中县| 开鲁县| 大石桥市| 逊克县| 会宁县|