Вложенный класс - вызов вложенного класса от родительского класса

У меня есть класс посредством чего вызовы метода вложенный класс. Я хочу получить доступ к свойствам родительского класса из вложенного класса.

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 из дочернего класса? Что-то, чтобы сделать со ссылкой на родительский класс, но как?

5
задан Zach Johnson 30 March 2010 в 23:38
поделиться

4 ответа

Используйте ключевое слово this для передачи ссылки на 'себя' в конструктор дочернего класса.

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
            ...
        }
    }
}
9
ответ дан 18 December 2019 в 10:43
поделиться

Подробное руководство по использованию вложенных классов в 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);     
        }
    }
}
3
ответ дан 18 December 2019 в 10:43
поделиться

Вам нужно передать ссылку на экземпляр родительского класса, например, в конструкторе ChildClass. Конечно, вы можете получить доступ к полям ParentClass, если они статические.

Примечание: Если вы когда-нибудь работали с Java, то C# поддерживает только понятие "статического" внутреннего класса.

2
ответ дан 18 December 2019 в 10:43
поделиться

Итак, в конструкторе вашего вложенного класса передайте ссылку на внешний класс. Таким образом, вы сможете получить доступ к свойствам родительского класса из вложенного класса.

Также стоит отметить, что статические свойства родительского класса доступны вам.

http://en.csharp-online.net/Nested_Classes

Example:

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( );
        }
    }
}
2
ответ дан 18 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: