2015-12-30 28 views
1

我的項目(C#MVC)類繼承一個基類,由於某種原因,我需要在基類具有參數創建構造像波紋管:如何解決建築陷阱

Public class MyBase 
{ 
Public MyBase(string param1, string param2, string param3) 
{ 
} 
} 

Public class MyClass : MyBase 
{ 
} 

現在的問題是,每個派生類需要定義具有參數的基類構造函數。如果我沒有在派生類中定義基類構造函數,那麼顯示錯誤「參數少構造函數」 在基類構造函數的每個類上編寫代碼是痛苦的,有沒有什麼辦法避免這項工作

+0

自定義代碼片段如何? –

+0

請檢查我的答案。 –

回答

1

擺脫錯誤的唯一方法是添加參數少構造但是,顯然這並不理想,因爲您需要指定參數。

在Visual Studio 2015中,您可以單擊該錯誤,然後單擊「生成構造函數」,這使添加構造函數的過程變得更加容易。

看到這個answer背後有點解釋。

您必須重新聲明構造函數,因爲它們實際上不是繼承的。如果你認爲構造函數在某些方面有點像靜態方法,這是有道理的。

0

如果我對你有所瞭解,你想要一個從你擁有的基礎派生的類,但你不想重載基構造器。這是您可能喜歡的一種解決方案。如果你隱藏你的課堂建設怎麼辦?

public class MyBase 
{ 

    public MyBase(string param1, string param2, string param3) 
    { 
    } 
} 

public class MyClass: MyBase 
{ 
    // notice - hide constructor - private 
    private MyClass(string p1, string p2, string p3) : base(p1, p2, p3) 
    { 

    } 

    public static MyClass Create() 
    { 
     return new MyClass(null, null, null); 
    } 
} 

使用

var c = MyClass.Create(); 

至於結果,來電者不必擔心使用構造函數。更重要的是,您現在可以完全更改派生類的構造

+0

T.S感謝您的回覆,您的解決方案非常有趣。但我的要求是不同的,讓我們描述我不想在我的派生類中做任何事情,沒有任何接觸或繼承或任何魅力什麼我不知道可以解決我的問題。希望你明白我的期望。我是超過100班,它是真的很痛苦,我要改變或在每一行上寫一行。謝謝你的回覆 – shamim