155 votos

Clases vs. Módulos en VB.Net

Se considera una práctica aceptable para el uso de los Módulos en lugar de Clases Compartida con funciones de miembro en VB.Net?

Tiendo a evitar que los Módulos, porque sienten que la izquierda sobre los restos de VB6 y realmente no parece encajar en más. Por otro lado, no parece haber una gran diferencia entre el uso de un Módulo y una Clase con sólo miembros Compartidos. No es que menudo que realmente tengo mucha necesidad para cualquiera, pero a veces hay situaciones en las que se presente una sencilla solución.

Tengo curiosidad por saber si usted tiene alguna opinión o preferencias de una manera o de la otra.

205voto

Mehrdad Afshari Puntos 204872

Modules VB son homólogos a C# static clases. Cuando la clase está diseñada exclusivamente para funciones auxiliares y los métodos de extensión y usted no desea permitir la herencia y la creación de instancias, se utiliza un Module.

Por el camino, utilizando Module no es muy subjetivo y no se desestima. De hecho, debe utilizar un Module cuando es apropiado. .NET Framework, en sí mismo, muchas veces (System.Linq.Enumerable, por ejemplo). Para declarar un método de extensión, es necesario para el uso Modules.

33voto

dr. evil Puntos 12196

Creo que es una buena idea para mantener los módulos evitando a menos que los pega en espacios de nombres separados. Porque en Intellisense métodos en módulos serán visibles desde todas partes en ese espacio de nombres.

Así que en lugar de ModuleName.MyMethod() se termina con MyMethod() popups en cualquier lugar y en este tipo de invalida la encapsulación. (Al menos en el nivel de programación).

Por eso siempre trato de crear la clase con métodos compartidos, parece mucho mejor.

26voto

JaredPar Puntos 333733

Los módulos no están en desuso y se usa mucho en el lenguaje VB. Es la única manera, por ejemplo, para implementar un método de extensión en VB.Net.

Existe una enorme diferencia entre los Módulos y las Clases con los Miembros Estáticos. Cualquier método definido en un Módulo es accesible a nivel mundial mientras que el Módulo está disponible en el espacio de nombres actual. En efecto, un Módulo que permite definir métodos globales. Esto es algo que una clase sólo se comparte con los miembros no pueden hacer.

He aquí un ejemplo rápido que yo uso mucho a la hora de escribir el código de VB que interops con las interfaces COM.

Module Interop
  Public Function Succeeded(ByVal hr as Integer) As Boolean
    ...
  End Function

  Public Function Failed(ByVal hr As Integer) As Boolean
    ...
  End Function
End Module

Class SomeClass
  Sub Foo()
    Dim hr = CallSomeHrMethod()
    if Succeeded(hr) then
      ..
    End If
  End Sub
End Class

11voto

Chandra Malla Puntos 451

Es aceptable el uso de Module. Module no es utilizado como un reemplazo para Class. Module sirve a sus propios fines. El propósito de Module es utilizar como un contenedor para

  • los métodos de extensión,
  • las variables que no son específicos de ningún Class, o
  • las variables que no se ajustan adecuadamente en cualquier Class.

Module no es como un Class puesto que no se puede

  • heredar de un Module,
  • implementar un Interface con un Module,
  • ni de crear una instancia de un Module.

Nada dentro de un Module puede acceder directamente dentro de la Module de la asamblea, sin referencia a la Module por su nombre. De forma predeterminada, el nivel de acceso para Module es Friend.

6voto

JRS Puntos 540

Cuando una de mis clases VB.NET tiene todos los miembros compartidos yo tampoco convertirlo en un módulo con una coincidencia (o de otra manera adecuada) de espacio de nombres o que hacer que la clase no se puede heredar y no edificable:

 Public NotInheritable Class MyClass1

   Private Sub New()
      'Contains only shared members.
      'Private constructor means the class cannot be instantiated.
   End Sub

End Class
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X