0
美好的一天,我對經驗豐富的C#程序員有一個相當簡單的問題。基本上,我想有一個抽象基類,它包含一個依賴於子類的值的函數。我嘗試過類似於下面的代碼,但編譯器抱怨SomeFunction()嘗試使用它時SomeVariable爲null。C#函數繼承 - 使用具有基類函數的子類Vars
基類:
public abstract class BaseClass
{
protected virtual SomeType SomeVariable;
public BaseClass()
{
this.SomeFunction();
}
protected void SomeFunction()
{
//DO SOMETHING WITH SomeVariable
}
}
子類:
public class ChildClass:BaseClass
{
protected override SomeType SomeVariable=SomeValue;
}
現在我希望,當我做:
ChildClass CC=new ChildClass();
ChildClass的一個新實例應和CC將使用SomeValue運行其繼承的SomeFunction。但是,這不是發生了什麼。編譯器抱怨在BaseClass中SomeVariable爲null。我想在C#中做什麼?我已經使用其他託管語言來允許我做這樣的事情,所以我確信我只是在這裏犯了一個簡單的錯誤。
任何幫助非常感謝,謝謝。
感謝您的快速回復。所以變量和屬性在構造函數被調用時不會被初始化?那我不知道。此外,該屬性及其引用的變量是否也需要虛擬或抽象? 最後,派生類如何從其基類訪問構造函數?當使用base.something時它們不會顯示出來; –
@ SeanO'Connor只有當您希望能夠覆蓋它的實現時,該屬性才需要是虛擬的,這對計算屬性有意義。派生類使用base關鍵字調用基礎構造函數,如下所示:Derived():base(param1,param2){} – dasblinkenlight
啊,我認爲這會清除所有東西。再次感謝您的幫助。 –