c# - 公共(public)类由于其保护级别而无法访问

标签 c#

我有以下类(class):

namespace Bla.Bla 
{
    public abstract class ClassA 
    {
        public virtual void Setup(string thing) 
        {
        }

        public abstract bool IsThingValid();

        public abstract void ReadThings();

        public virtual void MatchThings() { }

        public virtual void SaveThings() { }

        public void Run(string thing) 
        {
            Setup(thing);

            if (!IsThingValid()) 
            {

            }

            ReadThings();
            MatchThings();
            SaveThings();
        }
    }
}

namespace Bla.Bla 
{
    public class ClassB : ClassA 
    {
        ClassB() { } 

        public override void IsThingValid() 
        {
            throw new NotImplementedException();
        }

        public override void ReadThings() 
        {
            throw new NotImplementedException();
        }
    }
}

现在我尝试执行以下操作:

public class ClassC 
{
    public void Main() 
    {
        var thing = new ClassB();
        ClassB.Run("thing");
    }
}

返回以下错误:ClassB 由于其保护级别而无法访问。

但它们都是公开的。

最佳答案

此错误是ClassB构造函数 保护级别的结果,而不是ClassB 本身。由于构造函数的名称与类* 的名称相同,因此可能错误解释错误。由于您没有指定构造函数的保护级别,因此默认情况下假定为 internal。声明构造函数 public 将解决这个问题:

public ClassB() { } 

* 也可以说构造函数没有名字,只有类型;这不会改变问题的本质。

关于c# - 公共(public)类由于其保护级别而无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404264/

相关文章:

c# - First <>扩展方法是否有安全版本?

c# - 如何避免丢失列表的值

c# - 抽象类和只有 protected 构造函数的类有什么区别? (。网)

c# - CDN 路径在 MVC 中的 js 捆绑中不起作用

c# - 使用Object Initializer的复活区别

c# - Console.Write ("H") 和 Console.Write ('H' ) 在 C# 中有什么区别

c# - C#中的主线程锁定

C# WMI 权限

C#:如果输入为空,如何设置默认值

javascript - 如何在页面加载时在 HtmlEditorExtender 中设置内容