在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;
}
}
}
}
似乎我必须这样做:
public class OuterClass
{
public int OuterClassProperty
{
get
{
return 1;
}
}
public class InnerClass
{
public int InnerClassProperty
{
get
{
OuterClass ImplementedOuterClass = new OuterClass();
return ImplementedOuterClass.OuterClassProperty;
}
}
}
}
我认为第一个代码示例应该没问题,因为如果InnerClass
被实例化,那么父类将首先实现 - 以及父类属性。
感谢您的帮助,我正在努力学习C#的内外版本...而且我对Java不熟悉,相比之下,Java不会有帮助多...
答案 0 :(得分:4)
您正在观察的行为在C#规范中明确说明。下面的C#5.0片段:
10.3.8.4此访问权限 嵌套类型及其包含类型与this-access(第7.6.7节)没有特殊关系。具体来说,嵌套类型中的这个不能用于引用包含类型的实例成员。如果嵌套类型需要访问其包含类型的实例成员,则可以通过为包含类型的实例提供this作为嵌套类型的构造函数参数来提供访问。
C#中嵌套类的行为对于Java inner classes in c#和C +等其他语言是不同的,因为C#是由不同语言设计团队创建的不同语言。选择特定行为的确切历史原因可能在C#设计团队成员的博客,.Net设计指南书或MSDN文章中找到。