Cualquier conjunto de instrucciones que crees, deben estar necesariamente dentro de un miembro (member). Estos conjuntos de código deben estar contenidos en algún archivo que representa una unidad de código.
En Visual Basic, existen los módulos, que pueden cumplir esta función. (En realidad, esto se hereda de las primeras implementaciones del lenguaje, donde los miembros que se utilizaban como genéricos, podían estar en módulos globales).
Por herencia, esa funcionalidad sigue existiendo para el .Net Framework, pero C# no dispone de esa forma de contenedor. Para C# solo existen clases.
Esto no es ni malo, ni bueno.
Si se convierte un módulo de VB, a C#, basta con definir una clase como estática… y lo demás será igual (bueno, los miembros también deben declararse como estáticos).
Por otra parte, en el propio Visual Basic, también es posible declarar métodos estáticos.. pero no tiene la funcionalidad de clase estática.. para ello, ya tiene el módulo.
Considera que, una clase estática, podría ser como una biblioteca (y aclaro, es biblioteca NO “librería” ), de tus funciones personalizadas “de uso directo”. Por ejemplo, si haces muchos programas financieros, podrías tener métodos estáticos para cálculos de interés, de amortización etc.
Sin embargo, en muchas otras oportunidades, una clase podrá representar una entidad de tu problemática y en dicho caso, podrás considerarlas como plantillas para crear distintas ocurrencias de dichas entidades.
Pero, en definitiva, una clase es una plantilla (template), que contiene código relacionado.
En ella, los miembros podrán ser de distinto tipo:
Propiedades
Representan los “atributos” de cada entidad (instancia). Por ejemplo, si quiero representar un color, podría definir una clase que exponga las propiedades Rojo, verde y azul.
Definirlas como propiedades, permite que se puede ejecutar código dentro de ellas. Así, cuando se le asigna un valor, establecer un cálculo, o validar que el valor esté dentro de un determinado rango.
O asignar un valor predeterminado cuando otro código reclama el valor.
Estamos entonces definiendo que, en realidad una propiedad es una combinatoria de dos miembros: el de asignar el valor, y el de obtener el valor.
Private m_Rojo As Integer Public Property Rojo() As Integer Get Return m_Rojo End Get Set(ByVal value As Integer) m_Rojo = value End Set End Property
int m_Rojo = 0; public int Rojo { get { return m_Rojo; } set { m_Rojo = value; } }
Si embargo, se puede obviar una de las dos partes.
Dejar la propiedad como de solo lectura.
Private m_Rojo As Integer Public ReadOnly Property Rojo() As Integer Get Return m_Rojo End Get End Property
int m_Rojo = 0; public int Rojo { get { return m_Rojo; } }
Dejar la propiedad como de solo escritura
Private m_Rojo As Integer Public WriteOnly Property Rojo() As Integer Set(ByVal value As Integer) m_Rojo = value End Set End Property
int m_Rojo = 0; public int Rojo { set { m_Rojo = value; } }
O definir la propiedad sin asignar código específico.
Public Property Rojo As Integer
public int Rojo { get; set; }
Campos.
Son formas especiales de propiedades, que se basan en simplemente definir la variable, su tipo y su “exposición” (que nivel de otros objetos pueden utilizarlo).
Por lo demás, son variables dentro de la clase.
Public Verde As Integer
public int Verde;
Métodos.
Son conjuntos de código para ejecutar.
Podemos sub clasificarlos entre los que no retornan ningún valor (procedimientos), y los que si retornan un valor (funciones).
En C#, en realidad, todos retornan un valor (o sea, son funciones). Pero en el caso de no necesitar que retorne nada, se declara el tipo que se retorna como void.
Sub HacerAlgo() End Sub Function RetornarAlgo() As Integer End Function
public void HacerAlgo() { } public int RetornarAlgo() { }
Así mismo, un método admite que se le pasen argumentos:
Sub HacerAlgo(argumento As String) End Sub
public void HacerAlgo(string argumento) { }
Los argumentos pueden ser opcionales, en cuyo caso, se requiere que se le asigne un valor predeterminado. además, una vez que se declara un argumento como opcional, todos los que siguen deben serlo.
Sub HacerAlgo(Optional argumento As String = "Valor") End Sub
public void HacerAlgo(string argumento="Valor") { }
O declarar un conjunto de argumentos de los que no se conoce la cantidad. En este caso, se declara como vector, arreglo (Array), para que se asignen todos los que hagan falta.
Sub HacerAlgo(ParamArray argumentos() As String) End Sub
public void HacerAlgo(params string[] argumentos) { }
Dejamos para más adelante, definir otras cosas, como los eventos.
Pero con estos elementos, ya podremos empezar a crear cosas útiles.