Para empezar, que es un miembro?
Los miembros nos van a representar datos y comportamientos, esto tanto en clases como en estructuras. En las clases todo lo declarado dentro de ella y por herencia son miembros.
Los tipos de miembros que puede contener una clase o estructura:
Miembro | Descripción |
Campos | Los campos son variables declaradas dentro de la clase. Un campo puede ser un o una instancia de otra clase. |
Constantes | Las constantes son campos o propiedades cuyo valor se establece en tiempo de compilación y no se puede cambiar. |
Propiedades | Las propiedades son métodos de una clase a los que se obtiene acceso como si fueran campos de esa clase. Una propiedad puede proporcionar protección a un campo de clase con el fin de evitar que se cambie sin el conocimiento del objeto. |
Métodos | Los métodos definen las acciones que una clase puede realizar. Los métodos pueden aceptar parámetros que proporcionan datos de entrada y devolver datos de salida a través de parámetros. |
Eventos | Los eventos proporcionan a otros objetos notificaciones sobre lo que ocurre, como clics en botones o la realización correcta de un método. Los eventos se definen y desencadenan mediante delegados. |
Operadores | Un operador es un término o un símbolo que acepta como entrada una o más expresiones, u operandos, y devuelve un valor. Los operadores que requieren un operando, como el operador de incremento (++) o new, se conocen como operadores unarios. Los operadores que requieren dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios. Un operador, el operador condicional (?:), utiliza tres operandos y es el único operador terciario. |
Indizadores | Los indizadores permiten indizar un objeto de manera similar a como se hace con las matrices. |
Constructores | Los constructores son métodos a los que se llama cuando el objeto se crea por primera vez. Se utilizan a menudo para inicializar los datos de un objeto. |
Destructores | Son métodos a los que llama el motor de ejecución cuando el objeto está a punto de quitarse de la memoria. Generalmente se utilizan para asegurarse de que los recursos que se deben liberar se controlan apropiadamente. |
Ahora bien, ya que sabemos que es un miembro, podemos decir que el modificador static se utiliza para declarar un miembro estático, y este indica que un miembro, en lugar de pertenecer a un objeto, pertenece a la propia clase.
De este modo conseguimos que en cada instanciación de un objeto sólo haya una copia del miembro static (sin importar el número de instanciaciones).
Para acceder a los valores de un miembro static es necesario hacer la referencia a través del nombre de la clase y no con algún objeto, esto es:
Class Animal {
Public static int corre(){…}
}
Animal.corre();
De esta forma se accede a los miembros statics de las clases.
¿En dónde podemos utilizar dicho modificador?
Se puede utilizar con clases, campos, métodos, propiedades, operadores, eventos y constructores, pero no puede utilizarse con indizadores, destructores o tipos que no sean clases (por ejemplo: interfaces). Además no puede combinarse con ninguno de los modificadores de herencia (abstract y final) ni de versión segura (hide y override).
Miembros estáticos
Algunas particularidades:
- Los métodos estáticos también se pueden sobrecargar.
- Aunque un campo no se puede declarar como static const, const es esencialmente estático en su comportamiento.
- C# no admite las variables locales estáticas (variables que se declaran dentro del método).
- Los miembros estáticos se inicializan antes de obtener acceso al miembro estático por primera vez y antes de llamar al constructor estático, si éste existe.
Clases estáticas
Una clase estática, comúnmente se utiliza para agrupar métodos que solo hacen procesos con datos de entrada por medio de los parámetros.
El crear una clase estática es similar a construir una clase no estática con miembros estáticos y un constructor privado, este último evitara que se creen instancias de esta. Aunque podamos hacer esto último, el crear una clase estática tiene la ventaja de que el compilador comprueba que no se agregue algún miembro de instancia (miembro no estático) y nos garantice de que no se puedan hacer instancias de esta. Además de que toda clase estática es de tipo " sealed "(sellada) y por lo tanto no pueden heredarse y esta a su vez no puede heredar de alguna otra clase excepto la clase object.
Las clases estáticas pueden contar con constructores, obviamente que no serán constructores de instancia sino que serán estáticos, y su uso se limita a inicializar variables estáticas, esto también se puede aplicar a las clases no estáticas que cuenten con miembros estáticos y se necesiten inicializar.
Constructores estáticos
Un constructor estático se utiliza para inicializar cualquier dato estático o realizar una determinada acción.
Por ejemplo:
class Time{
static readonly long time;
static Time()
{
time = DateTime.Now.Ticks;
}
} .