Ich habe einen Fehler
Zugriff auf ein nicht statisches Element vom äußeren Typ 'Project.Neuro' über geschachtelter Typ 'Project.Neuro.Net'
mit einem solchen Code (vereinfacht):
%Vor%Ich kann die problematische Methode in die Neuro.Net-Klasse verschieben, aber ich brauche diese Methode draußen.
Ich bin eine Art objektiver Programmierer Neuling.
Vielen Dank im Voraus.
Das Problem ist, dass geschachtelte Klassen keine abgeleiteten Klassen sind, daher werden die Methoden in der äußeren Klasse nicht geerbt .
Einige Optionen sind
Machen Sie die Methode static
:
Verwenden Sie Vererbung statt Verschachtelungsklassen:
%Vor% Erstellen Sie eine Instanz von Neuro
:
Sie müssen ein Objekt vom Typ Neuro
irgendwo in Ihrem Code instanziieren und OtherMethod
darauf aufrufen, da OtherMethod
keine statische Methode ist. Ob Sie dieses Objekt innerhalb von SomeMethod
erstellen oder es als Argument übergeben, bleibt Ihnen überlassen. Etwas wie:
Alternativ können Sie OtherMethod
statisch machen, was es Ihnen erlaubt, sie von SomeMethod
wie Sie gerade sind, aufzurufen.
Obwohl die Klasse innerhalb einer anderen Klasse verschachtelt ist, ist es immer noch nicht offensichtlich, welche Instanz der äußeren Klasse mit welcher Instanz der inneren Klasse spricht. Ich könnte eine Instanz der inneren Klasse erstellen und sie an die andere Instanz der äußeren Klasse übergeben.
Daher benötigen Sie eine bestimmte Instanz, um dieses OtherMethod()
aufzurufen.
Sie können die Instanz bei der Erstellung übergeben:
%Vor%Ich denke, das Erstellen einer Instanz der äußeren Klasse in der inneren Klasse ist keine gute Option, da Sie möglicherweise die Geschäftslogik für den äußeren Klassenkonstruktor ausführen. Das Erstellen statischer Methoden oder Eigenschaften ist die bessere Option. Wenn Sie darauf bestehen, eine Instanz der äußeren Klasse zu erstellen, fügen Sie dem äußeren Klassenkonstruktor einen weiteren Parameter hinzu, der keine Geschäftslogik ausführen soll.