Forums Neueste Beiträge
 

Shared Function und Klassenvariable

18/07/2008 - 16:07 von Joachim Hofmann | Report spam
Hallo,

Ich möchte innerhalb einer Public Shared-Funktion auf eine Klassenvariable (es
sei m_meineVariable) zugreifen.

Nun sagt der Compiler berechtigterweise, daß es so einfach nicht geht, weil er
eine Instanz statt einfach m_meineVariable erwartet, welche ja so erstmal nicht
da ist, denn:
Eine Public Shared-Funktion kann ja ohne vorherige Erzeugung einer Instanz
aufgerufen werden.

Ich könnte (vermutlich klappt das) anstatt m_meineVariable ja ad hoc eine
Dummy-Instanz angeben, die einfach nur den Default-Wert von m_meineVariable
zurückgibt:
New Meineklasse().m_meineVariable. (oder die zugehörige Property).

Schön, aber was ist, wenn ich die Shared-Funktion doch auf einer vorher
erzeugten Instanz I anwende? Dann würde ich ja den in I tatsàchlich
eingestellten Wert von m_meineVariable erwarten anstatt den den Default-Wert der
"Dummy-Instanz".

Jetzt habe ich gelesen, daß Me auf Nothing verweisen kann, wenn ich ohne Instanz
arbeite.
Hört sich für mich logisch an: also Me abfragen zur Fallunterscheidung.
Wenn ich aber "If Me Is Nothing" eintippe, bekomme ich schon gesagt "Me ist nur
innerhalb einer Instanzenmethode gültig". Geht also auch nicht.

Wo ist mein Denkfehler
oder wie kann ich dieses Problem lösen?


Vielen Dank

Joachim
 

Lesen sie die antworten

#1 Elmar Boye
18/07/2008 - 16:41 | Warnen spam
Hallo Joachim,

Joachim Hofmann schrieb:
Ich möchte innerhalb einer Public Shared-Funktion auf eine
Klassenvariable (es sei m_meineVariable) zugreifen.

Nun sagt der Compiler berechtigterweise, daß es so einfach nicht geht,
weil er eine Instanz statt einfach m_meineVariable erwartet, welche ja
so erstmal nicht da ist, denn:
Eine Public Shared-Funktion kann ja ohne vorherige Erzeugung einer
Instanz aufgerufen werden.

Ich könnte (vermutlich klappt das) anstatt m_meineVariable ja ad hoc
eine Dummy-Instanz angeben, die einfach nur den Default-Wert von
m_meineVariable zurückgibt:
New Meineklasse().m_meineVariable. (oder die zugehörige Property).

Schön, aber was ist, wenn ich die Shared-Funktion doch auf einer vorher
erzeugten Instanz I anwende? Dann würde ich ja den in I tatsàchlich
eingestellten Wert von m_meineVariable erwarten anstatt den den
Default-Wert der "Dummy-Instanz".

Jetzt habe ich gelesen, daß Me auf Nothing verweisen kann, wenn ich ohne
Instanz arbeite.
Hört sich für mich logisch an: also Me abfragen zur Fallunterscheidung.
Wenn ich aber "If Me Is Nothing" eintippe, bekomme ich schon gesagt "Me
ist nur innerhalb einer Instanzenmethode gültig". Geht also auch nicht.

Wo ist mein Denkfehler
oder wie kann ich dieses Problem lösen?



Die Kernfrage bleibt unbeantwortet: Warum willst Du das?

Eine Shared Methode hat nichts mit der Klasse zu tun -
sie entspricht mehr oder weniger dem einer Methode wie man
sie bei prozeduraler Programmierung verwendet.

Wenn Du Zugriff auf eine Instanz-Variable benötigst, ist das
normalerweise ein Hinweis darauf, dass die Methode als eine
Instanz-Methode (ohne Shared) implementiert werden sollte -
eben weil sie nur mit der Variable einen Nutzen hat.

Meinst Du trotzdem das eine Shared Implementation besser ist,
so übergebe die Instanz als Parameter, ala

Class Klasse
dim m_variable As Integer

Public Shared Sub Methode(ByVal value As Klasse)
Console.WriteLine(value.m_variable)
End Sub
End Class

Gruß Elmar

Ähnliche fragen