无法访问抽象类中的受保护构造函数

时间:2012-12-03 06:30:16

标签: c# constructor abstract

我正在为抽象类创建单元测试代码。这是该类的片段:

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 个答案:

答案 0 :(得分:2)

您无法创建abstract类的实例。 protected构造函数仅对派生类可见。阅读Accessibility Levels (C# Reference)以清除访问修饰符之间的差异及其在各种(包括类)范围内的影响。

来自MSDN:

  

在类声明中使用abstract修饰符来表示a   class只是作为其他类的基类。

此外,ComponentComponent_Accessor肯定是不同的类型。