小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#特性之?dāng)?shù)據(jù)類(lèi)型

 weijianian 2016-08-07


這篇文章主要通過(guò)演示類(lèi)在不同發(fā)展中的不通過(guò)定義方法,來(lái)向讀者表述它們之間的區(qū)別和聯(lián)系。


在C#1時(shí)代,我們喜歡這樣定義類(lèi):


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沒(méi)有提供與其內(nèi)部?jī)?nèi)容有關(guān)的編譯時(shí)信息,如果不慎寫(xiě)錯(cuò),編譯器也不會(huì)出現(xiàn)任何提示;


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


3、用于創(chuàng)建屬性和變量的代碼很復(fù)雜,這違背了我們進(jìn)行封裝的原本意愿;


在C#2時(shí)代,我們喜歡這樣定義類(lèi):


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 GetArrayList()
{
List list = new List();
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);
}
}


現(xiàn)在,屬性擁有了私有的賦值方法,并且它能非常聰明的“猜出”List是告知編譯器列表中只能包含Product。


試圖將一個(gè)不同類(lèi)型添加到列表中會(huì)造成編譯時(shí)錯(cuò)誤,并且當(dāng)你從列表中獲取結(jié)果時(shí),也并不需要轉(zhuǎn)化結(jié)果的類(lèi)型;有效的解決了C#1中的前兩個(gè)問(wèn)題;


在C#3時(shí)代,我們喜歡這樣定義類(lèi):


public class Product
{
public string Name
{
get; private set;
}

public decimal Price
{
get; private set;
}

public Product(){}

public static List GetArrayList()
{
return new List()
{
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);
}
}


發(fā)展到這個(gè)階段,我們可以很明顯的發(fā)現(xiàn),不再有任何代碼(或者可見(jiàn)的變量)與屬性關(guān)聯(lián),而且硬編碼的列表是以一種全然不同的方式構(gòu)建,這樣一來(lái),我們實(shí)際上是完全可以刪除就有的構(gòu)造函數(shù),但是外部代碼就不能再創(chuàng)建其他的產(chǎn)品實(shí)例。自動(dòng)熟悉大大簡(jiǎn)化了操作;


在C#4時(shí)代,我們喜歡這樣定義類(lèi):


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 GetArrayList()
{
return new List()
{
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);
}
}



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


總結(jié):

C#1(只讀屬性,弱類(lèi)型集合)------>C#2(私有屬性賦值方法,強(qiáng)類(lèi)型集合)------>C#3(自動(dòng)實(shí)現(xiàn)的熟悉,增強(qiáng)的集合和對(duì)象初始化)------>C#4(用命名實(shí)參更清晰的調(diào)用構(gòu)造函數(shù)和方法)

注:由于C#5在這方面的特性表現(xiàn)的沒(méi)有太大變化,所以就不再表述。


來(lái)源:hippieZhou

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多