为啥我不能访问子类中的受保护变量?
Posted
技术标签:
【中文标题】为啥我不能访问子类中的受保护变量?【英文标题】:Why can't I access protected variable in subclass?为什么我不能访问子类中的受保护变量? 【发布时间】:2011-10-06 17:53:42 【问题描述】:我有一个带有受保护变量的抽象类
abstract class Beverage
protected string description;
我无法从子类访问它。 Intellisense 没有显示它可以访问。为什么会这样?
class Espresso:Beverage
//this.description ??
【问题讨论】:
错误信息是什么?你能发布失败的行吗?因为它现在被注释掉了,所以它不会因为它不在任何方法中而编译。 没有错误信息。它只是在课堂上无法访问。正如答案所暗示的那样,它可以在方法内部访问。 嗯,实际上,nothing 可以通过外部方法访问。如果它是public
而不是protected
,则以完全相同的方式失败。
谢谢弗拉德。我会记住这一点的。
【参考方案1】:
简答:description
是一种特殊类型的变量,称为“field”。您可能希望阅读字段on 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.
【讨论】:
@Ufuk:查看我对原始答案的修改。一定要了解调用方法时执行的类成员代码之间的区别——这是面向对象编程中非常重要的概念!【参考方案2】:您可以从方法中访问它。试试这个:
class Espresso : Beverage
public void Test()
this.description = "sd";
【讨论】:
抽象与此无关。 @Steven: 还有protected
。 :-)以上是关于为啥我不能访问子类中的受保护变量?的主要内容,如果未能解决你的问题,请参考以下文章