2012-12-03 100 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是绝对不同的类型。

相关问题