gpt4 book ai didi

C# 嵌套类属性

转载 作者:行者123 更新时间:2023-11-30 20:44:03 26 4
gpt4 key购买 nike

在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 相比不会有太大帮助...

最佳答案

您观察到的行为在 C# 规范中有明确说明。下面的 C# 5.0 片段:

10.3.8.4 this access
A nested type and its containing type do not have a special relationship with regard to this-access (§7.6.7). Specifically, this within a nested type cannot be used to refer to instance members of the containing type. In cases where a nested type needs access to the instance members of its containing type, access can be provided by providing the this for the instance of the containing type as a constructor argument for the nested type.

C# 中嵌套类的行为与其他语言不同,例如 Java inner classes in c#和 C+ 因为 C# 是由不同语言设计团队创建的不同语言。可以在 C# 设计团队成员的博客、.Net 设计指南书籍或 MSDN 文章中找到选择特定行为的确切历史原因。

关于C# 嵌套类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com