Existen los modulos en en C#

17/01/2007 - 04:48 por RobWare.Ruiz | Informe spam
Soy nuevo en C# vengo de la tradicion de Visual Basic 6.0 y quisiera que me
aterrizaran unos concepto, existen los modulos en C# como los que existen en
Visual Basic?, como se pueden declarar variables globales al proyecto?, yo
normalmente cuando trabajo en proyectos de base de datos, creo una conexion
con un objeto global que referencio durante todo el proyecto y simplemente
abro la conexion cuendo la requiero y la cierro cuando no la necesito mas, se
puede implementar lo mismo en C#, y en caso de que no como se podría hacer?

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
17/01/2007 - 08:26 | Informe spam
"RobWare.Ruiz" wrote in message
news:
Soy nuevo en C# vengo de la tradicion de Visual Basic 6.0 y quisiera que
me
aterrizaran unos concepto, existen los modulos en C# como los que existen
en
Visual Basic?, como se pueden declarar variables globales al proyecto?, yo
normalmente cuando trabajo en proyectos de base de datos, creo una
conexion
con un objeto global que referencio durante todo el proyecto y simplemente
abro la conexion cuendo la requiero y la cierro cuando no la necesito mas,
se
puede implementar lo mismo en C#, y en caso de que no como se podría
hacer?



Simplemente declara tus objetos globales como "public static" dentro de
una clase. Después úsalos en cualquier parte del proyecto poniendo
NombreDeLaClase.NombreDelObjeto.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
17/01/2007 - 16:26 | Informe spam
"RobWare.Ruiz" wrote in message
news:
Primero muchas gracias por lo presteza con lo que soluciono mi inquietud,
segundo y continuando con el tema, si coloco la variable objeto en una
clase,
igual deberia crear una variable (instancia) de dicha clase que se
mantuviera
globalmente, como realizo esta proeza para poder accesarla desde cualquier
lugar del programa?



No, ahi está la gracia de ponerle la palabra "static" a la declaración.
Las variables declaradas como static son accesibles desde el momento en que
se inicia el programa, sin necesidad de instanciar la clase que las
contiene. Obviamente, solo puede haber una copia en memoria de cada variable
static, a diferencia de las de instancia, que tienen una copia por cada
instancia que se cree de la clase contenedora.
Otra diferencia entre las variables estáticas y las de instancia es que
las estáticas se invocan con el nombre de la clase, mientras que las de
instancia se invocan a través de un objeto instanciado.

Ejemplo:

public class VariablesGlobales
{
public static int Numero;
public static StringBuilder SB;
}

En cualquier sitio del programa:

VariablesGlobales.Numero=7; //Observa que no hace falta instanciar la
clase VariablesGlobales

VariablesGlobales.SB = new StringBuilder();
SB.Append("Hola");
//Observa que para acceder a la variable SB no ha sido necesario
instanciar la clase contenedora VariablesGlobales, pero que para hacer algo
con el propio SB, que a su vez es un objeto, sí que hace falta instancar SB.
Respuesta Responder a este mensaje
#3 Alfredo Novoa
17/01/2007 - 21:17 | Informe spam
On Wed, 17 Jan 2007 11:36:00 -0800, RobWare.Ruiz
wrote:

Esta es la solucion C# para lo que pregunte. Estuve reflexionando la
respuesta, y desde un punto de vista meramente argumental, quisiera compartir
mi descontento.



Yo también estoy bastante descontento con los lenguajes de
programación en general.

Conceptualmente una clase no es el sitio natural donde uno
pondria variables, funiones y procedimientos globales;



Tienes toda la razón. Eso viene de una mala comprensión de los
conceptos básicos de la programación imperativa por parte de los
diseñadores de los lenguajes.

Tampoco es buen sitio para ningún otro tipo de función, y mucho menos
para las estáticas.

C# obliga a que asociemos cada función a un único tipo, y hay
funciones que no necesitan estar asociadas a ningún tipo y otras que
necesitan estar asociadas a varios.

El caso de las variables estáticas es una barbaridad mucho más grande.
Estamos obligados a asociar cada variable global al nombre de un tipo,
lo cual no tiene ninguna lógica.

por que lo que tengo
entendido una clase, es una abstraccion de una entidad de información



Esta definición es muy vaga.

No está nada claro lo que es una clase. A veces se usa como sinónimo
de tipo, otras veces como sinónimo de tipo por referencia. Otras veces
se usa con el significado de la definición de un tipo, y luego dos
lineas más abajo se usa como sinónimo de tipo. Muchas otras veces se
dan definiciones completamente informales, etc, etc.

Reitero,
gracias por la respueta solo que soy nuevo en C# y no puedo de dejar de
compararlo con lo que ya conozco.



Siendo nuevo te será más fácil ver sus defectos.


Saludos
Respuesta Responder a este mensaje
#4 Octavio Hernandez
18/01/2007 - 01:08 | Informe spam
Rob,

Conceptualmente una clase no es el sitio natural donde uno pondria
variables,
funciones y procedimientos globales.





Bueno, el mundo no es idealmente orientado a objetos, para qué negarlo
(aunque
yo, como muchos, pienso que en general es más orientado a objetos que
procedimental,
funcional, relacional, o cualquier otra cosa inventada hasta la fecha).

Los creadores de .NET (como antes los de Java) decidieron utilizar la clase
como
elemento de modularización fundamental, y al menos en C# y VB.NET (también!)
*TODO* debe estar dentro de una clase.

Supón que los que inventaron C# hubieran decidido crear una palabra clave
"module",
equivalente a la secuencia "static class" (podrían haberlo hecho sin mayor
problema, creo).

module VariablesGlobales
{
public static int Numero;
}

Bueno, pues ya tienes un módulo!

Te diré que cuando en VB.NET defines un Module, estás creando ni más ni
menos
que una clase (sólo tienes que examinar el ensamblado con ILDASM o Reflector
para convencerte). Un módulo de VB es un tipo especial de clase que solo
contiene
métodos y variables "globales".

La otra diferencia que queda es que en VB (bajo ciertas circunstancias)
podrías referirte
a la variable simplemente usando su nombre: Numero. La exigencia de C# de
poner el
nombre de la clase ("módulo") delante del nombre de la variable:

VariablesGlobales.Numero

te protegerá de uno de los mayores peligros de las variables globales, las
colisiones de
nombres. Y te permitirá de manera segura tener diferentes variables llamadas
Numero
en diferentes "módulos" sin posibilidad de confusión para el compilador.

Salu2 - Octavio
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
18/01/2007 - 02:02 | Informe spam
Alfredo Novoa schreef:

El caso de las variables estáticas es una barbaridad mucho más grande.
Estamos obligados a asociar cada variable global al nombre de un tipo,
lo cual no tiene ninguna lógica.



Bueno, es que en el caso de una clase con variables globales no se
trata
de un 'tipo' sino de un 'módulo' y por eso se llama 'clase'. Lógico!

No está nada claro lo que es una clase. A veces se usa como sinónimo
de tipo, otras veces como sinónimo de tipo por referencia. Otras veces
se usa con el significado de la definición de un tipo, y luego dos
lineas más abajo se usa como sinónimo de tipo. Muchas otras veces se
dan definiciones completamente informales, etc, etc.



pues eso ... y otras veces 'módulo' que es un 'tipo' de 'clase' con un

conjunto vacio como dominio y operaciones definidas sobre los elementos
de este conjunto que tienen como rango un conjunto de 'cosas', que se
llaman 'objetos'.

[ Perdón, pero no pude resistir la tentanción. :-) ]

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida