我有一個asbtract類的例子。另一個泛型類UsesExample使用它作爲約束,並使用new()約束。後來,我創建了一個子類Example Example,並將其用於泛型類。但是,不管怎樣,當泛型類中的代碼嘗試創建新副本時,它不會調用子類中的構造函數,而是調用父類中的構造函數。爲什麼會發生? 下面的代碼:爲什麼父母的構造函數被調用?
abstract class Example {
public Example() {
throw new NotImplementedException ("You must implement it in the subclass!");
}
}
class ExampleChild : Example {
public ExampleChild() {
// here's the code that I want to be invoken
}
}
class UsesExample<T> where T : Example, new() {
public doStuff() {
new T();
}
}
class MainClass {
public static void Main(string[] args) {
UsesExample<ExampleChild> worker = new UsesExample<ExampleChild>();
worker.doStuff();
}
}
你能肯定嗎?我不是100%關於C#,但通常調用父的構造函數需要顯式調用super()(以Java的方式) –
他是正確的,你可以看我在我的答案中提供的鏈接(其中之一是msdn) – YavgenyP
@MK:這是正確的。在C#中,總是調用父構造函數。如果你不指定':this()'或':base()'調用,它將自動調用無參數的構造函數。 – Guffa