2010-06-02 12 views
10

Mam trzy takie klasy.Czy mogę uzyskać dostęp do obiektów klasy zewnętrznej w klasie wewnętrznej

class A 
{ 
    public class innerB 
     { 
     //Do something 
     } 

    public class innerC 
     { 
     //trying to access objB here directly or indirectly over here. 
     //I dont have to create an object of innerB, but to access the object created by A 
     //i.e. 
      innerB objInnerB = objB; 
     //not like this 
      innerB objInnerB= new innerB(); 
     } 

private innerB objB{get;set;} **//Private** 

public A() 
    { 
    objB= new innerB(); 
    } 
} 

Chcę uzyskać dostęp do obiektu klasy B, klasy C, który jest tworzony przez klasy A. Czy można w jakiś sposób dokonać zmian na obiekcie klasy A do klasy C mogę uzyskać obiekt Class A poprzez tworzenie zdarzenia lub w każdym razie.

Edytuj: Mój błąd w zadaniu powyższego pytania. Przedmiot B tworzone w to prywatny nie publiczny

to możliwe, aby to zrobić TWORZENIE EVENT

Jeśli mimo wszystko staję w stanie podnieść zdarzenie, które mogą być obsługiwane przez klasy A, to mój problem może być rozwiązany.

+3

Odkąd napisałeś tam większość kodu ... dlaczego nie po prostu zrzucić go do Visual Studio i spróbować samemu? –

+0

@Justin: Thx za pomoc, już próbuję to zrobić w VS. Właśnie podsumowałem 100 linii kodu w tym, czego naprawdę chcę w obecnej sytuacji. Proszę zasugerować, jeśli dostaniesz jakieś rozwiązanie. Muszę uzyskać dostęp do obiektu A w moim wydarzeniu, które jest wywoływane przez inną klasę i jest przechwytywane w innerC –

Odpowiedz

15

Jeśli dobrze Cię odczytuję, chcesz uzyskać dostęp do właściwości objB klasy A w wewnętrznym C, bez przekazywania go dalej.

Nie jest to, jak działają wewnętrzne klasy C#, jak opisane w tym artykule: C# nested classes are like C++ nested classes, not Java inner classes

Jeśli chcesz uzyskać dostęp do A.objB z innerC wtedy będą musieli się jakoś przejść klasy A do innerC.

+12

Musisz przekazać rodzicowi (ponieważ nie ma słowa kluczowego "zewnętrzny"), ale klasa wewnętrzna ** może ** uzyskać dostęp do prywatnych członków rodzic. – dbkk

+0

Dzięki za upadek. Poza tym jesteś w błędzie. –

+2

Zapytaj kompilatora C#: [przykładowy kod] (http://pastebin.com/HwA6F2Ee). – dbkk

-1

Ponieważ twoja klasa B znajduje się w tym samym zakresie co klasa C, to znaczy, w klasie A, będziesz mógł utworzyć instancję zagnieżdżonego typu B z zagnieżdżonego typu C i użyć go.

+0

Nie sądzę, że tego właśnie szuka - jeśli dobrze go czytam, chce uzyskać dostęp do właściwości objB klasa A wewnątrz innerC, BEZ podania go. –

7

Trzeba zdać odniesienie OuterClass do InnerClass, może w konstruktorze, jak:

public class OuterClass 
{ 
    //OuterClass methods 

    public class InnerClass 
    { 
     private OuterClass _outer; 

     public InnerClass(OuterClass outer) 
     { 
      _outer = outer; 
     } 
    } 
} 

Następnie można użyć tego referencyjny we wszystkich swoich metod InnerClass.

+0

Próbuję to zrobić na zdarzenie, które zostało podniesione przez niektóre formantu użytkownika, którego uchwyt został zdefiniowany w klasie B, który ma kolekcję obiektów klasy C. –

+0

Czy Twoje argumenty dotyczące zdarzenia mogą zawierać odwołanie do potrzebnego obiektu? – dlras2

+0

Nie sądzę, ponieważ to wydarzenie jest podnoszone przez kontrolkę użytkownika, która ponownie była powiązana z Kolekcją, która jest przechowywana przez klasę B zawierającą kolekcję klasy C. Wiem, że w tej chwili jest to nieco mylące. –

Powiązane problemy