嵌套类 - 从父类调用嵌套类

时间:2010-03-30 23:29:42

标签: c# asp.net class

我有一个类,其中一个方法调用一个嵌套类。我想从嵌套类中访问父类属性。

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?与引用父类有关,但是如何处理?

4 个答案:

答案 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( );
        }
    }
}