在 C# 中,为什么嵌套类必须实例化它的父类,以在代码中引用其父类的非静态属性?
public class OuterClass
{
public int OuterClassProperty
{
get
{
return 1;
}
}
public class InnerClass
{
public int InnerClassProperty
{
get
{
/* syntax error: cannot access a non-static
* member of outer type via nested type.
*/
return OuterClassProperty;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
看来我必须这样做:
public class OuterClass
{
public int OuterClassProperty
{
get
{
return 1;
}
}
public class InnerClass
{
public int InnerClassProperty
{
get
{
OuterClass ImplementedOuterClass = new OuterClass();
return ImplementedOuterClass.OuterClassProperty;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为第一个代码示例应该没问题,因为如果InnerClass实例化,父类将首先实现 - 以及父类属性。
感谢您的帮助,我正在尝试学习 C# 的来龙去脉……而且我对 Java 不熟悉,与 Java 相比并没有太大帮助……
您观察到的行为在 C# 规范中明确说明。下面是 C# 5.0 的片段:
10.3.8.4 this access
嵌套类型和它的包含类型对于 this-access(第 7.6.7 节)没有特殊的关系。具体来说,嵌套类型中的 this 不能用于引用包含类型的实例成员。在嵌套类型需要访问其包含类型的实例成员的情况下,可以通过为包含类型的实例提供 this 作为嵌套类型的构造函数参数来提供访问权限。
C# 中嵌套类的行为对于其他语言(如C#和 C+ 中的Java 内部类)是不同的,因为 C# 是由不同语言设计团队创建的不同语言。选择特定行为的确切历史原因可能会在 C# 设计团队成员的博客、.Net 设计指南书或 MSDN 文章中找到。
| 归档时间: |
|
| 查看次数: |
1240 次 |
| 最近记录: |