C#嵌套类属性

时间:2015-04-24 18:02:42

标签: c#

在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不会有帮助多...

1 个答案:

答案 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文章中找到。