由于其保护级别,公共类无法访问

jao*_*jao 42 c#

我有以下课程:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这会返回以下错误:由于其保护级别,ClassB无法访问.

但他们都是公开的.

das*_*ght 87

这个错误的保护水平的结果ClassB构造函数,而不是ClassB自己.由于构造函数的名称与类*的名称相同,因此可能会错误地解释错误.由于您未指定构造函数的保护级别,因此internal默认情况下将其假定为.声明构造函数public将解决此问题:

public ClassB() { } 
Run Code Online (Sandbox Code Playgroud)

*也可以说构造函数没有名称,只有一个类型; 这并没有改变问题的本质.