2017-06-14 54 views
3

我試圖從基類中重載一個方法,這是第三方DLL。如何在基類沒有定義構造函數時重寫方法

我得到一個異常:

類型 'B' 沒有定義的構造函數。

有沒有辦法重寫派生類中的方法?

下面的代碼片段。

Public Class A : B 
{ 
    Public A() 
    { 
    }  

    // method to override from Class B 
    public override object BaseMethod() 
    { 
    } 
} 

我也查了The type '...' has no constructors defined,但它並沒有談論繼承而只是新-ING了一個實例。

Inherit an abstract class without any constructor解釋說,我不能從這樣的類繼承 - 所以尋找其他方式來重寫一個方法。

+1

錯誤消息是不言自明的! –

+0

Chris ......在這種情況下,我從外部程序集繼承類。所以,我需要覆蓋在我的派生類 – KNC

+0

Akbari ...我明白這個類沒有構造函數,但我的目標是覆蓋方法 – KNC

回答

3

正如Inherit an abstract class without any constructor中所述,您不能從不公開構造函數的類派生出來。當sealed不是選項時,隱藏構造函數通常會顯式地作爲防止繼承的方式。所以你可能有很好的理由不能爲這種特殊類型做到這一點。

您選擇:

  • 修改(或索要)的DLL揭露構造
  • 看到,如果你確實需要從特定類派生或有你的代碼可以實現,而不是
  • 接口
  • 從其他類派生(如C:B),該類也從DLL公開,但具有可訪問的構造函數。請注意,如果仔細設計類層次結構,則不會提供這樣的類。

或者,您可以問大會的作者如何以其他方式解決您的問題(他們有很好的機會爲他們已經考慮過的常見場景提供解決方案)。

相關問題