2008-09-25 32 views
63

Como se acaba de indicar en un reciente question y answer, no se puede heredar de una clase estática. ¿Cómo se hacen cumplir las reglas que acompañan a las clases estáticas dentro de VB.NET? Como el marco es compatible entre C# y VB, tendría sentido que hubiera una manera de marcar una clase estática, pero no parece haber una manera.Marcado de una clase estática en VB.NET

Respuesta

93

== Módulo de clase estática

Si lo que desea es una clase que no se puede heredar, utilizar una clase de NotInheritable. Pero no será estático/Compartido. Puede marcar todos los métodos, propiedades y miembros como Compartidos, pero eso no es estrictamente lo mismo que una clase estática en C#, ya que el compilador no lo aplica.

Si realmente desea el vb.net equivalente a una clase estática C#, use un Módulo. No se puede heredar y todos los miembros, propiedades y métodos son estáticos/compartidos.

+1

sí un módulo es una clase estática. Simplemente lea sobre los métodos de extensión y MS le dirá lo mismo. – chrissie1

+0

Interesante. No he jugado con extensiones en VB. – MagicKat

+2

Me retracto de mi comentario anterior. Estaba mirando un módulo en el reflector y el IL lo muestra como sellado. – MagicKat

-1

Creo que el equivalente VB.NET de static es Shared.

+9

sí ... pero, no puedes marcar una clase Compartida. – MagicKat

+1

Simplemente márcalo como "No heredable" y declara todos sus miembros como Compartidos; también tendrías que hacer esto en C#. – Shimmy

5

Si solo desea crear una clase que no pueda heredar, en C# puede usar Sealed y en VB.Net usar NotInheritable.

El equivalente de estática de VB.Net es compartido.

+7

No puede marcar una clase como compartida. –

+0

marca sus variables y funcionalidades como compartidas, tal como lo haría en la clase estática de C#. Marcar como NotInheritable lo sella. – Shimmy

1

Desde el punto de vista de CLR, la clase estática C# es solo clase "cerrada" y "abstracta". No puede crear una instancia porque es abstracta y no puede heredar de ella porque está sellada. El resto es solo algo de compilación mágica.

2

Puede crear clases estáticas en vb.net. La solución es

Friend NotInheritable Class DB 
    Public Shared AGE As Integer = 20 
End Class 

variable edad es pública estática, que se puede utilizar en otro tipo de código al igual que este

Dim myage As Integer = DB.AGE 

amigo = pública, NotInheritable = estática

+0

Amigo! = Público, Amigo = interno – Altair

30

Casi allí. También debes evitar la creación de instancias.

NotInheritable Class MyStaticClass 

    ''' <summary> 
    ''' Prevent instantiation. 
    ''' </summary> 
    Private Sub New() 

    End Sub 

    Public Shared Function MyMethod() As String 

    End Sub 

End Class 
  • Shared es como método de clase estática.
  • NotInheritable es como sellado.
  • Privado Nuevo es como una clase estática no se puede crear una instancia.

Ver ... MSDN - Static Classes and Static Class Members

+1

+1 para la muestra del código real –

Cuestiones relacionadas