从嵌套类到包含类的 C# 成员访问 [重复]

Posted

技术标签:

【中文标题】从嵌套类到包含类的 C# 成员访问 [重复]【英文标题】:C# Member Access from Nested Class to Containing Class [duplicate] 【发布时间】:2010-03-03 16:36:08 【问题描述】:

我有 ClassB,它嵌套在 ClassA 中。在 ClassA 中,我有一个名为 _MyId 的变量...如何从 ClassB 访问 _MyId?

提前致谢!

【问题讨论】:

【参考方案1】:

简单地说,您需要在ClassB 中引用一个实例ClassA

C# 的嵌套类的工作方式与 Java 的不同,如果您习惯这样做的话。最接近的类比是 Java 的 static class 当应用于嵌套类型时(这意味着 C# 的嵌套类与外部类的特定实例相关联)。

换句话说,与外部类相比,C# 的嵌套类并不“特殊”,除了它们对外部类的私有成员具有可见性这一事实。尽管如此,您仍然需要对外部类的引用才能访问它们。

【讨论】:

【参考方案2】:

在 ClassB 的构造函数中传递一个类 A 的实例。

【讨论】:

【参考方案3】:

如果字段是static,您可以简单地将其称为ClassA._MyId。如果不是,您应该使用classAInstance._MyId,其中classAInstanceClassA 的一个实例。

如果您有 Java 背景,请注意 C# 中的嵌套类类似于 Java 中的静态嵌套类。

【讨论】:

【参考方案4】:

您必须引用ClassA 的特定实例才能检索成员。如果您的实例名为foo,则只需使用foo._MyId

【讨论】:

【参考方案5】:

如果 _MyId 是静态的,您可以通过其名称或 ClassA._MyId 访问它。

但除此之外,您首先需要一个 ClassA 的 instance,并且与来自另一个类(非嵌套)的访问几乎没有区别。但是 ClassB 的成员确实可以访问 ClassA 的私有成员。

说明:嵌套类是两种类型之间的静态关系,实例之间没有隐式关系。您必须在它们之间传递对对象的引用,就像类没有嵌套一样。

【讨论】:

以上是关于从嵌套类到包含类的 C# 成员访问 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

试图通过指针访问嵌套类的成员函数

如何访问嵌套类的私有成员?

java内部类的静态嵌套类

为啥嵌套的子类可以访问其父类的私有成员,而孙子却不能?

访问超类的私有成员

如何使用外部类的实例访问嵌套类的属性[重复]