2012-12-03 153 views
0

我正在爲抽象類創建單元測試代碼。這裏是該類的片段:無法訪問抽象類中受保護的構造函數

public abstract class Component 
    { 

     private eVtCompId mComponentId; 
     private eLayer mLayerId; 
     private IF_SystemMessageHandler mLogger; 

     protected Component(eVtCompId inComponentId, eLayer inLayerId, IF_SystemMessageHandler inMessageHandler) 
     { 
      mLayerId = inLayerId; 
      mComponentId = inComponentId; 
      mLogger = inMessageHandler; 
     } 

我在構造函數的參數中有兩個枚舉後跟一個接口。

這裏是我的單元測試代碼片段:

Component_Accessor target = new Component_Accessor(eVtCompId.MasterSWCommDevice, eLayer.Foundation, new MySysMsgHandler()); 

我不斷收到錯誤消息「Component_Accessor不包含一個構造函數‘3’的論點」。我似乎無法理解爲什麼會發生這種情況。當我刪除abstract關鍵字時,單元測試工作正常。

我不明白爲什麼單元測試似乎無法「看到」構造函數,如果該類設置爲abstract。任何人都可以解釋爲什麼會發生?提前致謝。

+1

'Component'和'Component_Accessor'是定義不同的類型。他們如何互相引用? – horgh

回答

2

您無法創建abstract類的實例。 protected構造函數僅對派生類可見。閱讀Accessibility Levels (C# Reference)以清除訪問修飾符之間的差異及其在各種(包括類)範圍中的影響。

從MSDN:

使用類聲明abstract修飾符以指示 類僅旨在成爲一個基類其他類。

此外,ComponentComponent_Accessor是絕對不同的類型。

相關問題