2009-02-04 10 views
6

Das mag eine dumme Frage sein - aber warum sind gemeinsame Methoden für Typen und Instanzen in VB.net verfügbar - irre ich anzunehmen, dass sie den statischen C# Methoden entsprechen?VB.net Shared vs C# Statische Zugänglichkeit Unterschiede, warum?

d.h

MyClass.MySharedMethod() 

dim mc as new MyClass() 
mc.MySharedMethod() 

Warum bin ich, dies zu tun erlaubt? Welchen möglichen Vorteil gibt es da - alles was ich sehen kann, ist verwirrend bei der Verwendung von IntelliSense. Ich bin mir sicher, dass dies etwas mit der Konvention von VB6 zu tun hat, warum sollte man das auf .NET bringen - es scheint mir so kaputt zu sein.

Antwort

17

Ja, es ist im Grunde ein Kater von VB6. Java lässt Sie das auch tun, aber die meisten IDEs warnen Sie in diesen Tagen, glaube ich.

Und ja, es ist eine wirklich schlechte Idee. Das offensichtlichste Beispiel dafür ist schlecht Thread.Sleep:

Dim t as new Thread(...) 
t.Sleep(1000) 

Welcher Thread schläft? Der aktuelle. Do!

+1

Nun, VB6 hatte keine gemeinsamen Subs/Funktionen in Klassen. Wie kann das ein Kater sein? –

+1

liebe das Beispiel – JaredPar

+0

@Konrad: Ooh, interessant. Ich hatte (vor einer Weile) gehört, dass es eine rückwärtskompatible Sache war. Seltsam, wenn es nicht ... –

2

Dies kann eine dumme Frage sein - aber warum sind gemeinsame Methoden für Typen und Instanzen in VB.net verfügbar - irre ich anzunehmen, dass sie den statischen C# Methoden entsprechen?

Sie sind gleich. VB wird warnen, wenn Sie versuchen, sie auf Instanzen zu verwenden, aber es ist nicht verboten. Dies hat wahrscheinlich mit dynamischer Typisierung und späte Bindung zu tun. Stellen Sie sich vor, Sie hätten ein spät gebundenes Objekt (Object), ohne dessen genauen Typ zu kennen. Wie würdest du eine statische Methode ihrer Klasse nennen?

Soweit ich weiß, wäre dies in C# nicht möglich (ohne auf Reflexion zurückgreifen zu müssen). In VB mit Option Strict Off können Sie es einfach als Instanzmethode des Objekts bezeichnen.

+1

ok warum ist es dann nicht verboten - sie wissen, es ist eine schlechte Idee, wenn sie dich warnen - also warum stören? – dfasdljkhfaskldjhfasklhf

+0

+1 [bestätigt] (http://ideone.com/Nuag3y) –

+0

@ kingfrito_5005 Das 'Static' Schlüsselwort existiert in VB, ist aber etwas völlig anderes (es regelt die Lebensdauer von lokalen Variablen, was C# nicht unterstützt). Um was von OP gefragt ('statische' Methoden),' Shared' in VB ist das Äquivalent von 'statisch' in C#. –