給定下面的兩個類,我想用int參數調用Child構造函數,然後用int參數調用父構造函數,最後使用Child無參數構造函數。C#構造器鏈接
這可以在不使用可選參數的情況下完成嗎?
public class Parent
{
public Parent()
{
Console.WriteLine("Parent ctor()");
}
public Parent(int i)
{
Console.WriteLine("Parent ctor(int)");
}
}
public class Child:Parent
{
public Child()
{
Console.WriteLine("Child ctor()");
}
public Child(int i)
{
Console.WriteLine("Child ctor(int)");
}
}
這是我們希望完成在.NET 4邏輯.NET 2.0
public class Parent2
{
public Parent2(int? i = null)
{
Console.WriteLine("Parent2 ctor()");
if (i != null)
{
Console.WriteLine("Parent2 ctor(int)");
}
}
}
public class Child2 : Parent2
{
public Child2(int? i = null)
: base(i)
{
Console.WriteLine("Child2 ctor()");
if (i != null)
{
Console.WriteLine("Child2 ctor(int)");
}
}
}
這裏是生產代碼我們討論
public class DataPoint<T>
{
public DataPoint() { }
public DataPoint(T xValue, int yValue)
{
XAxis = xValue;
YAxis = yValue;
}
public T XAxis { get; set; }
public int YAxis { get; set; }
}
public class DataPointCollection<T> : DataPoint<T>
{
DataPointCollection()
{
Labels = new List<string>();
}
DataPointCollection(T xValue, int yValue)
: base(xValue, yValue)
{ }
public List<string> Labels { get; set; }
}
編輯:
此時此問題的原因是「Code Go如果「學習練習要以最少的代碼遵循DRY方法。正常模式是在類中使用一個內部私有函數,該函數具有從每個構造函數執行的通用代碼。
編輯2
我加的例子生產代碼。
你只能一次鏈,並且可以」從父母到孩子的連鎖。 – Oded 2012-07-27 18:14:28
你想在類的構造過程中調用同一個類的多個構造函數嗎?我認爲你甚至不會**那樣做。如果你解釋爲什麼你想這樣做,我相信我們可以幫助你想出一個不同的解決方案。 – 2012-07-27 18:14:37
@Oded你錯了,**可以**多於一個鏈接調用(例如'Child():this(1)'和'Child(int val):base(val)'將有效地導致跟隨來電訂購:'父(INT),兒童(INT),兒童()' – 2012-07-27 18:17:21