C#:基类中的受保护方法;无法使用另一个类的派生类对象进行访问

时间:2017-05-06 05:38:53

标签: c# .net inheritance access-modifiers

基类的受保护成员是否可以从继承自基类的类访问?

我正在尝试使用来自另一个类的派生类的对象来访问基类的受保护方法,但是我收到此错误消息

the base class method is inaccessible due to protection level

我做错了什么?

Program.cs的

class Program
{
    static void Main(string[] args)
    {
        DerivedClass dc = new DerivedClass();
        dc.DisplayValue();

    }
}

BaseClass.cs

class BaseClass
{
    private int value = 3;

    protected void DisplayValue()
    {
        Console.WriteLine(this.value);
    }
}

DerivedClass.cs

class DerivedClass : BaseClass{}

2 个答案:

答案 0 :(得分:0)

DerivedClass中的代码可以访问BaseClass的受保护成员,但只能访问DerivedClass类型的表达式或子类型。

您的主要功能不在派生类中,这就是您获得例外的原因。

从C#5规范的第3.5.3节(强调我的):

  

在程序文本之外访问受保护的实例成员时   声明它的类,以及受保护的内部   实例成员在程序的程序文本之外访问   声明它,访问必须在一个类中发生   声明派生自声明它的类。   此外,需要通过实例进行访问   派生类类型或从它构造的类类型。

您可以将代码更改为此,例如使用基类的受保护功能

    public class Program
    {
        public static void Main(string[] args)
        {
            DerivedClass dc = new DerivedClass();
            dc.Display();
        }
    }
    public class BaseClass
    {
        private int value = 3;

        protected void DisplayValue()
        {
            Console.WriteLine(this.value);
        }
    }
    public class DerivedClass : BaseClass
    {
        public void Display()
        {
            DisplayValue();
        }
    }

答案 1 :(得分:0)

受保护的成员确实可以从派生类中看到。但是在您的示例中,您不会从派生类访问DisplayValue。您可以从Program访问它, 派生自BaseClass。您需要成为该成员public

相关问题