2012-06-11 8 views
7

Mam klasę C z niektórymi zmiennymi wewnętrznymi. Ma zagnieżdżoną klasę N, która chce uzyskać dostęp do zmiennych w C. Ani C ani N nie są statyczne, chociaż C ma pewne statyczne metody i zmienne. Kiedy próbuję uzyskać dostęp do niestatycznej zmiennej w C od N, otrzymuję faliste podkreślenie i komunikat "Nie mogę uzyskać dostępu do niestatycznego pola [fieldname] w statycznym kontekście".Klasa zagnieżdżona: Nie można uzyskać dostępu do pola niestacjonarnego w kontekście statycznym.

Wydaje się, że ma to coś wspólnego z klasą zagnieżdżoną, ponieważ mogę uzyskać dostęp do zmiennej grzywny z samej klasy otaczającej.

ReSharper sugeruje, że robię _t statyczny, ale to nie jest opcja. Jak sobie z tym poradzić?

public sealed partial class C 
{ 
    string _t; 

    class N 
    { 
     void m() 
     { 
      _t = "fie"; // Error occurs here 
     } 
    } 
} 
+1

możliwe duplikat [klasy wewnętrznej i zewnętrznej, w klasie C#] (http://stackoverflow.com/questions/3155172/inner-class-and-outer-class-in-c-sharp) oraz http: //stackoverflow.com/questions/2367015/java-inner-classes-in-c-sharp –

Odpowiedz

12

To nie jest Java, a nie masz wewnętrzne klas.

Instancja klasy zagnieżdżonej nie jest powiązana z żadną instancją klasy zewnętrznej, chyba że tworzy się powiązanie, przechowując odwołanie (inaczej uchwyt/wskaźnik) wewnątrz konstruktora.

public sealed partial class C 
{ 
    string _t; 

    class N 
    { 
     readonly C outer; 

     public N(C parent) { outer = parent; } 

     void m() 
     { 
      outer._t = "fie"; // Error is gone 
     } 
    } 
} 
+2

Książka O'Reilly "Nutshell" (Albahari & Albahari) mówi "Typ zagnieżdżony ... może uzyskać dostęp do prywatnych członków tego typu i wszystko inne, do czego ma dostęp typ otaczający. " – Sisiutl

+1

@Sisiutl: To nie ma nic wspólnego z dostępnością. Z powodu reguły "Nutshell" wspomina, mój kod działa nawet z 'private string _t;'. Bez tej reguły będziesz potrzebować albo "wewnętrznego", albo "publicznego". Metoda statyczna ma również dostęp do elementów prywatnych, ale przed użyciem elementów nie statycznych musi dostarczyć odwołanie do instancji. –

Powiązane problemy