У меня есть класс посредством чего вызовы метода вложенный класс. Я хочу получить доступ к свойствам родительского класса из вложенного класса.
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 из дочернего класса? Что-то, чтобы сделать со ссылкой на родительский класс, но как?
Используйте ключевое слово 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
...
}
}
}
Подробное руководство по использованию вложенных классов в 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);
}
}
}
Вам нужно передать ссылку на экземпляр родительского класса, например, в конструкторе ChildClass
. Конечно, вы можете получить доступ к полям ParentClass
, если они статические.
Примечание: Если вы когда-нибудь работали с Java, то C# поддерживает только понятие "статического" внутреннего класса.
Итак, в конструкторе вашего вложенного класса передайте ссылку на внешний класс. Таким образом, вы сможете получить доступ к свойствам родительского класса из вложенного класса.
Также стоит отметить, что статические свойства родительского класса доступны вам.
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( );
}
}
}