从嵌套类到包含类的 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
,其中classAInstance
是ClassA
的一个实例。
如果您有 Java 背景,请注意 C# 中的嵌套类类似于 Java 中的静态嵌套类。
【讨论】:
【参考方案4】:您必须引用ClassA
的特定实例才能检索成员。如果您的实例名为foo
,则只需使用foo._MyId
。
【讨论】:
【参考方案5】:如果 _MyId 是静态的,您可以通过其名称或 ClassA._MyId 访问它。
但除此之外,您首先需要一个 ClassA 的 instance,并且与来自另一个类(非嵌套)的访问几乎没有区别。但是 ClassB 的成员确实可以访问 ClassA 的私有成员。
说明:嵌套类是两种类型之间的静态关系,实例之间没有隐式关系。您必须在它们之间传递对对象的引用,就像类没有嵌套一样。
【讨论】:
以上是关于从嵌套类到包含类的 C# 成员访问 [重复]的主要内容,如果未能解决你的问题,请参考以下文章