【问题标题】:cannot access protected constructor in abstract class无法访问抽象类中的受保护构造函数
【发布时间】:2012-12-03 06:30:16
【问题描述】:

我正在为一个抽象类创建一个单元测试代码。这是该类的一个sn-p:

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;
        }

我在构造函数的参数中是两个枚举,后跟一个接口。

这是我的单元测试代码中的一个 sn-p:

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

我不断收到错误消息“Component_Accessor 不包含采用'3'参数的构造函数”。我似乎无法理解为什么会这样。当我删除 abstract 关键字时,单元测试工作正常。

如果类设置为abstract,我不明白为什么单元测试似乎无法“看到”构造函数。谁能解释为什么会这样?提前致谢。

【问题讨论】:

  • ComponentComponent_Accessor 是绝对不同的类型。它们是如何相互引用的?

标签: c# constructor abstract


【解决方案1】:

您不能创建abstract 类的实例。 protected 构造函数仅对派生类可见。阅读Accessibility Levels (C# Reference),了解访问修饰符之间的差异及其在各种(包括类)作用域中的影响。

来自 MSDN:

在类声明中使用 abstract 修饰符来表明一个 class 仅作为其他类的基类。

另外,ComponentComponent_Accessor 绝对是不同的类型。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2013-11-13
    • 2014-08-29
    • 2013-08-29
    • 2015-11-17
    • 2011-05-02
    • 2018-07-16
    • 2019-11-18
    • 2012-08-18
    相关资源
    最近更新 更多