Tengo un módulo de servicios desde VB.NET no tiene clase estática como C# y el Módulo es la clase estática en VB.NET. La razón por la que yo uso módulo es porque estoy utilizando el método de Extensión y sólo se puede utilizar en el Módulo.
Yo no puedo referencia a este módulo, pero si pongo mi código en una clase. Me puede hacer referencia a ella sin ningún problema. ¿Cuál podría ser la razón? Me perdí de C#.
Edit: El módulo está dentro de una clase llamada de la biblioteca de la Utilidad.
- Creo que no se comprende acerca de VB.Net’s capacidades. Los módulos no son Compartidos/Clases Estáticas, que son globales para el espacio de Nombres de métodos que se pueden utilizar en cualquier lugar. Son generalmente de Tipo abstracto, ni Extensiones. Funciones, Subrutinas, e incluso Extensiones de vivir fuera de la programación orientada a objetos burbuja, descrito por @Konrad-Rudolph
- Otro punto, para el futuro de los espectadores….Los nombres de los Módulos no deben tener el mismo nombre entre las Bibliotecas. Los nombres deben ser únicos en su nombre entre los usos.
Debido a que los Módulos en VB no son las clases y no puede ser utilizado para crear instancias de objetos. Más bien, son algo similar a los espacios de nombres, con la diferencia de que los espacios de nombres no pueden contener funciones directamente. Así que la razón de los módulos es el de proporcionar una forma para que las funciones del grupo, lógicamente, que no pertenecen a una clase.
Esto tiene mucho sentido cuando se considera que no todo lo que lógicamente pertenece a una clase. Considere la posibilidad de
System.Math
. No hay absolutamente ninguna razón para hacer que una clase, que no sea un extraño OOP purismo.Por el camino, no se puede hacer referencia estática de las clases en C#, al menos no si he entendido bien lo que quieres decir por «referencia». Tal vez usted puede aclarar esto.
Usted necesita para marcar el módulo Módulo Público.
.NET compiladores pueden tomar cualquier tipo de sintaxis del lenguaje y convertirlo en una .NETA equivalente. A veces hay un uno para uno la correspondencia otras veces no la hay.
Mediante el .NET Reflector usted puede ver lo que el compilador que realmente está haciendo.
En VB.NET el módulo existe porque el patrimonio heredado de Visual BASIC y en parte de Microsoft BASIC.
La VB.NET compilador tomará este
Y convertirlo en esto (código de izquierda a cabo por razones de brevedad)
En C# el equivalente es este
Todo lo que importa es que el emite CIL hace el trabajo correctamente.
Esta capacidad es la principal razón por la cual muchas de las más antiguas de Visual BASIC 6 programadores están muy molestos por MS de cambios en el lenguaje. Por ejemplo, la palabra clave Entero de la emisión de un Int32 en lugar de un Int16.
Módulos están expuestos a otras asambleas referencia al ensamblado original mientras el módulo está declarada pública.
Tal vez los métodos/subs no son públicos? Yo tuve ese problema de una vez, y se permitiría el acceso a locales de código en su clase, pero no se si es que estaba fuera de su clase y marcado como «Privado».
No entiendo lo que están pidiendo.
VB.NET hace han clases estáticas, como en C#, ya que en VB.NET un
Module
ES unstatic class
. Ellos son uno y el mismo. Cualquier cosa que usted puede hacer con una clase estática que se puede hacer con un Módulo. Tal vez usted no ha marcado su Público/Privado/acceso Protegido correctamente?Module
NO unstatic class