为什么我不能访问子类中的受保护变量?

本文关键字:受保护 变量 子类 不能 访问 为什么 | 更新日期: 2023-09-27 18:02:22

我有一个抽象类,其中有一个受保护的变量

abstract class Beverage
{
        protected string description;
}

我不能从子类访问它。智能感知并没有显示它是可访问的。为什么会这样呢?

class Espresso:Beverage
{
    //this.description ??
}

为什么我不能访问子类中的受保护变量?

简短回答:description是一种特殊类型的变量,称为"字段"。您可能希望阅读MSDN上的字段。

长答案:你必须在子类的构造函数、方法、属性等中访问受保护的字段。

class Subclass
{
    // These are field declarations. You can't say things like 'this.description = "foobar";' here.
    string foo;
    // Here is a method. You can access the protected field inside this method.
    private void DoSomething()
    {
        string bar = description;
    }
}

class声明中,声明类的成员。这些可能是字段、属性、方法等。这些不是要执行的命令式语句。与方法内部的代码不同,它们只是告诉编译器类的成员是什么。

在某些类成员(如构造函数、方法和属性)内部是放置命令式代码的地方。下面是一个例子:

class Foo
{
    // Declaring fields. These just define the members of the class.
    string foo;
    int bar;
    // Declaring methods. The method declarations just define the members of the class, and the code inside them is only executed when the method is called.
    private void DoSomething()
    {
        // When you call DoSomething(), this code is executed.
    }
}

您可以从方法中访问它。试试这个:

class Espresso : Beverage
{
    public void Test()
    {
        this.description = "sd";
    }
}