閱讀本Constructor chaining question後,我只是想知道爲什麼會任何一個做構造函數鏈?構造函數鏈的用途?
可能有人請闡明類型的場景中,這可能是有用的一些情況。
這是一個良好的編程習慣?
閱讀本Constructor chaining question後,我只是想知道爲什麼會任何一個做構造函數鏈?構造函數鏈的用途?
可能有人請闡明類型的場景中,這可能是有用的一些情況。
這是一個良好的編程習慣?
這是絕對主要有兩個原因一個很好的做法:
爲了避免重複代碼
class Foo
{
public Foo(String myString, Int32 myInt){
//Some Initialization stuff here
}
//Default value for myInt
public Foo(String myString) : this(myString, 42){}
//Default value for both
public Foo() : this("The Answer", 42){}
}
要實施良好的封裝
public abstract class Foo
{
protected Foo(String someString)
{
//Important Stuff Here
}
}
public class Bar : Foo
{
public Bar(String someString, Int32 myInt): base(someString)
{
//Let's the base class do it's thing
// while extending behavior
}
}
的主要原因是要能夠構造之間重用代碼。您可以將所有初始化代碼放在一個構造函數中,並從其他構造函數中調用該代碼,而不是重複初始化。
我已經看到了它,當你有一些繁重的施工時間正在做的,和你有很多的創建對象的不同方式。 (所以少數具有不同參數簽名的ctors)。
你可以只是有一個私有成員函數,它不跨構建函數的共同工作。你並不需要在同一個班級中有一位同事打電話給另一位。 (甚至在大多數語言中都不允許)。
'構造鏈接' 是一個方法,構造函數在同一個cla中調用另一個構造函數SS。當我們有一個定義了多個構造函數的類時,這個特別有用。例如,我們在下面的例子中創建了一個名爲Person的類。我們也有三個領域,我們可以使用;年齡,姓名和HairColour。這個類有三個構造函數。如果我們不使用「構造鏈接」的方式,代碼會像下面:
不使用構造鏈接:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge)
{
Age = theAge;
}
public Person(int theAge, string theName)
{
Age = theAge;
Name = theName;
}
public Person(int theAge, string theName, string theHairColour)
{
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
正如你所看到的,在每一個構造函數,我們正在分配年齡值,重複代碼。我們還爲兩個構造函數中的Name賦予了一個值,所以再次有更多的重複。爲了消除這個問題,我們可以用參數最多的構造函數將所有值賦給Age,Name和HairColour。然後我們可以在調用其他兩個構造函數時調用該構造函數。看到下面的代碼來看看這個「鏈接」方法。
使用構造鏈接:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge):this(theAge, "", "")
{
//One parameter
}
public Person(int theAge, string theName):this(theAge, theName, "")
{
//Two Parameters
}
public Person(int theAge, string theName, string theHairColour)
{
//Three parameters
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
希望幫助 - 它節省了重複。
更「極端」例如,有很多領域(等許多潛在的重複的)的如下所示:
爲了保持行爲完全相同,您需要將'null'而不是''「'傳遞給鏈式構造函數 –
上爲什麼它僅適用於構造有何評論?爲什麼我不能對其他重載方法使用相同的技巧? –