2009-02-04 10 views
6

Esto puede ser una pregunta tonta, pero ¿por qué los métodos compartidos están disponibles en tipos e instancias en VB.net? ¿Me equivoco al suponer que son equivalentes a los métodos estáticos de C#?VB.net Compartido vs C# diferencias de accesibilidad estática, ¿por qué?

es decir

MyClass.MySharedMethod() 

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

¿Por qué se me permite hacer esto? ¿Qué posible ventaja hay para esto? Todo lo que puedo ver es confundir a las personas cuando usan intellisense. Estoy seguro de que esto tiene que ver con alguna convención del clásico VB6 por qué molestarse en llevar esto a .NET, simplemente me parece tan malo.

Respuesta

17

Sí, es básicamente una resaca de VB6. Java también te permite hacer esto, pero la mayoría de los IDE te advierten en estos días, creo.

Y sí, es una muy mala idea. El ejemplo más obvio de que es malo es Thread.Sleep:

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

¿Qué hilo está durmiendo? El actual. Doh!

+1

Bueno, VB6 no tenía subs/funciones compartidas en las clases. ¿Cómo puede ser esto una resaca? –

+1

encanta el ejemplo – JaredPar

+0

@Konrad: Ooh, interesante. Había escuchado (hace un tiempo) que era una cuestión de compatibilidad con versiones anteriores. Impar si no es ... –

2

Esto puede ser una pregunta tonta, pero ¿por qué hay métodos compartidos disponibles en tipos e instancias en VB.net? ¿Me equivoco al asumir que son equivalentes a los métodos estáticos de C#?

Son lo mismo. VB advertirá si intenta utilizarlos en instancias, pero no está prohibido. Probablemente esto tenga que ver con el tipado dinámico y el enlace tardío. Imagine que tiene un objeto con límite de demora (Object) sin conocer su tipo exacto. ¿Cómo harías para llamar a un método estático de su clase?

Hasta donde yo sé, esto no sería posible en C# (sin recurrir a la reflexión). En VB con Option Strict Off, puede simplemente llamarlo como un método de instancia del objeto.

+1

bien entonces, ¿por qué no está prohibido entonces? Ellos saben que es una mala idea si te lo advierten, así que ¿para qué molestarse? – dfasdljkhfaskldjhfasklhf

+0

+1 [confirmado] (http://ideone.com/Nuag3y) –

+0

@ kingfrito_5005 La palabra clave 'Static' existe en VB, pero es algo completamente diferente (regula la duración de las variables locales, algo que C# no admite). Por el bien de lo que OP pidió (métodos "estáticos"), "Compartido" en VB es el equivalente de "estática" en C#. –

Cuestiones relacionadas