关于C# this 指针
生活随笔
收集整理的這篇文章主要介紹了
关于C# this 指针
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
This關(guān)鍵字的另一種用法是使用一項(xiàng)名為構(gòu)造函數(shù)鏈的技術(shù)來(lái)設(shè)計(jì)類。當(dāng)定義了多個(gè)構(gòu)造函數(shù)時(shí),這個(gè)設(shè)計(jì)模式就會(huì)很有用。由于構(gòu)造函數(shù)通常會(huì)驗(yàn)證傳入的參數(shù)來(lái)強(qiáng)制各種業(yè)務(wù)規(guī)則,所以在類的構(gòu)造函數(shù)集合中經(jīng)常會(huì)找到冗余的驗(yàn)證邏輯。考慮如下更新后的Motocycle:
Class Motorcycle
{
Public int driverIntensity;
Public string driverName;
Public Motorcycle()
{}
//冗余的構(gòu)造函數(shù)邏輯
Public Motorcycle(int intensity)
{
If(intensity > 10)
{
Intensity = 10;
}
driverIntensity = intensity;
}
Public Motorcycle(int intensity,string name)
{
If(intensity>10)
{
Intensity = 10;
}
driverIntensity = intensity;
driverName = name;
}
……
}
在這里,每一個(gè)構(gòu)造函數(shù)確保強(qiáng)度等級(jí)不超過(guò)?10。雖然可以這么做,但是在兩個(gè)構(gòu)造函數(shù)中有冗余代碼語(yǔ)句。這不夠完美,如果規(guī)則改變的話,就必須在多個(gè)位置更新代碼。
改進(jìn)這種情況的一個(gè)方法就是在?Motocycle類中定義一個(gè)用來(lái)驗(yàn)證傳入?yún)?shù)的方法。如果這么做的話,每一個(gè)構(gòu)造函數(shù)就可以進(jìn)行字段賦值之前調(diào)用這個(gè)方法。雖然這個(gè)方法確實(shí)可以隔離在業(yè)務(wù)規(guī)則改變時(shí)需要修改的代碼,但是我們就會(huì)面臨如下的冗余:
class Motorcycle
{?
public int driverIntensity; public string driverName; //構(gòu)造函數(shù) Public Motorcycle() {} Public Motorcycle(int intensity) { SetIntensity(intensity); } Public Motorcycle(int intensity,string name) { SetIntensity(intensity); driverName = name; } Public void?SetIntensity(int intensity) { If(intensity >10) { Intensity = 10; }? driverIntensity = intensity; } …… } 一個(gè)更簡(jiǎn)潔的方案就是,讓一個(gè)接受最多參數(shù)個(gè)數(shù)的構(gòu)造函數(shù)做“主構(gòu)造函數(shù)”,并且實(shí)現(xiàn)必須的驗(yàn)證邏輯。其余的構(gòu)造函數(shù)可以使用?this關(guān)鍵字把傳入的參數(shù)轉(zhuǎn)發(fā)給主構(gòu)造函數(shù),并且提供所有必須的其他參數(shù)。這樣,整個(gè)類中只會(huì)有一個(gè)構(gòu)造函數(shù)需要我們?nèi)ゲ傩?#xff0c;其余構(gòu)造函數(shù)基本是空的。 下面是Motorcycle?類的最后一次迭代。在串聯(lián)構(gòu)造函數(shù)時(shí),請(qǐng)注意?this如何在構(gòu)造函數(shù)本身的作用域之外“躲開(kāi)”構(gòu)造函數(shù)的聲明: class Motorcycle { public int driverIntensity; public string driverName; //構(gòu)造函數(shù) public Motorcycle(){} public Motorcycle(int intensity):this(intensity,””){} public Motorcycle(string name):this(0,name){}? //這是做所有工作的“主”構(gòu)造函數(shù)?. Public Motorcycle(int intensity,string name) { If(intensity>10) { Intensity = 10; } driverIntensity = intensity; driverName = name; } …… } 需要理解的是,使用this關(guān)鍵字串聯(lián)構(gòu)造函數(shù)不是強(qiáng)制的。但如果使用這項(xiàng)技術(shù),類定義就會(huì)更容易維護(hù)、更簡(jiǎn)明。再說(shuō)一次,使用這項(xiàng)技術(shù)可以簡(jiǎn)化編程任務(wù),因?yàn)檎嬲墓ぷ鞫冀唤o了一個(gè)構(gòu)造函數(shù)來(lái)做,而其他構(gòu)造函數(shù)只是在“踢皮球”。?
from:?http://blog.csdn.net/cyh_24/article/details/7747995
from:?http://blog.csdn.net/cyh_24/article/details/7747995
總結(jié)
以上是生活随笔為你收集整理的关于C# this 指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大学生如何进化到程序猿
- 下一篇: 程序员面试题精选100题(08)-求1+