Ich habe gerade versucht, diese einfache Implementierung zu erstellen:
%Vor%Wenn ich es kompiliere, wird es sich beschweren:
Zugriff auf ein nicht statisches Element vom äußeren Typ 'A.Test' über den geschachtelten Typ 'B.Test.TestClass'
nicht möglich
Ich mag die Lösung der Einstellung nicht: static int abc = 0;
Gibt es dafür eine andere Lösung?
Sie kommen wahrscheinlich von einem Java-Hintergrund, wo dieser Code wie erwartet funktioniert.
In C # sind geschachtelte Typen static (im Sprachgebrauch von Java), d. h. sie sind nicht an eine Instanz der übergeordneten Klasse gebunden. Aus diesem Grund schlägt Ihr Code fehl. Sie müssen eine Instanz der übergeordneten Klasse irgendwie an die untergeordnete Klasse übergeben und auf ihr Mitglied abc
zugreifen.
Von verschachtelten C # -Klassen sind wie verschachtelte C ++ - Klassen, nicht Java-interne Klassen
Wenn Sie eine Klasse darin deklarieren eine andere Klasse, die innere Klasse noch verhält sich wie eine normale Klasse. Die Verschachtelung steuert Zugriff und Sichtbarkeit, aber nicht Verhalten. Mit anderen Worten, alle Regeln, die Sie regelmäßig gelernt haben Klassen gelten auch für verschachtelte Klassen.
In Java hat die innere Klasse ein Geheimnis dieses $ 0 Mitglied, das sich an das erinnert Instanz der äußeren Klasse, zu der es war gebunden.
Mit anderen Worten, Java innere Klassen sind syntaktischer Zucker, der nicht verfügbar ist nach C #. In C # müssen Sie es tun manuell.
Tags und Links c# nested-class