C# 嵌套类属性

Aar*_*mas 2 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;
            }
        }
    }
}
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 相比并没有太大帮助……

Ale*_*kov 5

您观察到的行为在 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 文章中找到。