2012-10-12 48 views

回答

1

類與受保護的構造上,通常有某種形式對他們返回實例的靜態方法的類。

2

我假設你可以創建你描述的類的子類。所有需要的是你在你自己的類中創建一個構造函數,它使用你需要的任何構造函數參數調用base()。

public MyDerivedClass : OtherBaseClass 
{ 
    MyDerivedClass() : base() 
    { } 
} 
+0

我已經嘗試使用派生類,但構造函數需要一個我不知道的參數。 –

+0

這是什麼意思?沒有人能夠告訴你什麼參數傳遞給你沒有以任何方式提供或描述的構造函數。 –

0

該類是抽象類嗎?如果是,那麼我相信正確的做法是繼承該類。

+0

這是一個公開課。 –

3

具有受保護構造函數的類不可訪問外部世界,但可以通過其派生類訪問。如果你想創建這些派生類的實例,那麼你可以但如果你想創建該基類的實例,那麼你可以引入一些基類返回類型的靜態方法,它可以在你每次調用時返回類的新實例實例方法,類似於Singleton模式,但不限於只創建一個實例。

第一種方式:

public Base 
{ 
    protected Base() { } 
} 

public Derived : Base 
{ 
    public Derived() : Base() { } 
} 

用法:

Dervied d = new Derived(); 

方式二:

public Base 
{ 
    protected Base() { } 

    public static Base Instance() { return new Base(); } 
} 

用法:

Base b = Base.Instance(); 
+0

我已經嘗試使用派生類,但構造函數需要一個我不知道的參數。我不能改變這個類中的任何東西,因爲它裏面有一個軟件應用程序附帶的dll文件。 –

+0

但是你可以做的是,用構造函數需要的參數創建一個參數化的構造函數,像public Derived():Base(string a){}。有這篇文章的參考:http://stackoverflow.com/questions/5142002/how-can-i-get-parameterized-constructor-data-of-base-class-in-child-class-if-chi –

相關問題