我有一个类,其中一个方法调用一个嵌套类。我想从嵌套类中访问父类属性。
public class ParentClass
{
private x;
private y;
private z;
something.something = new ChildClass();
public class ChildClass
{
// need to get x, y and z;
}
}
如何从子类中访问x,y和z?与引用父类有关,但是如何处理?
答案 0 :(得分:9)
使用this
关键字将对“您自己”的引用传递给ChildClass的构造函数。
public class ParentClass
{
public X;
public Y;
public Z;
// give the ChildClass instance a reference to this ParentClass instance
ChildClass cc = new ChildClass(this);
public class ChildClass
{
private ParentClass _pc;
public ChildClass(ParentClass pc) {
_pc = pc;
}
// need to get X, Y and Z;
public void GetValues() {
myX = _pc.X
...
}
}
}
答案 1 :(得分:3)
有关在C#中使用嵌套类的详细教程,请参阅http://www.codeproject.com/KB/cs/nested_csclasses.aspx。我想你正在寻找类似的东西:
class OuterClass
{
public int y = 100;
public class NestedClass
{
public static void abc()
{
OuterClass oc = new OuterClass();
System.Console.WriteLine(oc.y);
}
}
}
因此,为了访问外部类的字段,您需要一个可用于内部类的外部类的实例。
请记住,您可以从内部类访问静态字段,而不需要外部类的实例:
class OuterClass
{
public static int y = 100;
public class NestedClass
{
public static void abc()
{
System.Console.WriteLine(OuterClass.y);
}
}
}
答案 2 :(得分:2)
您需要传入对父类实例的引用,例如在ChildClass
的构造函数中。当然,如果这些字段是静态的,您可以访问ParentClass
字段。
注意:如果您曾经使用过Java,那么C#只支持“静态”内部类的概念。
答案 3 :(得分:2)
好吧,在嵌套类的构造函数中传递对外部类的引用。 这样,您就可以从嵌套类中访问父类属性。
此外,值得注意的是,您可以使用父类的静态属性。
http://en.csharp-online.net/Nested_Classes
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Application {
class OuterClass {
int someProperty = 10;
class NestedClass {
OuterClass reference;
public NestedClass( OuterClass r ) {
reference = r;
}
public void DoSomething( ) {
Console.Write( reference.someProperty );
}
}
public OuterClass( ) {
NestedClass nc = new NestedClass( this );
nc.DoSomething( );
}
}
class Test {
public static void Main( string[] args ) {
OuterClass oc = new OuterClass( );
}
}
}