Nuestras clases son estáticas o no estáticas. Cuando tenemos una clase no estática puede contener métodos, propiedades e incluso eventos estáticos. Puedes llamar a estos eventos incluso sin instanciar la clase.
El siguiente código es un buen ejemplo de ello.
1234567891011121314151617181920namespace SvsI{publicclassNonStaticDemo{publicstaticstringNoInstance(){regresar¡No necesito ninguna instanciación! ";}}clase públicaStaticVsInstance{cadena estáticaOtraInstancia(){regresar "Esto tampoco necesita una instancia.";}estaticevitarMain(String[] args){Consola.WriteLine($"Dice la clase NonStaticDemo: {NonStaticDemo.NoInstance()}"); Console.WriteLine($"Dice la clase StaticVsInstance: {StaticVsInstance.AnotherNoInstance()}"); Console.Read();}}}
csharp
La salida producida por el código es la siguiente.
12Dice la clase de NonStaticDemo: ¡No necesito ninguna instanciación! Dice la clase StaticVsInstance: Esto tampoco necesita una instancia. bashSin usar el modificador public , no podemos llamar al método NoInstance de la clase NonStaticDemo ya que no heredamos nada de eso en nuestra clase principal. También hay que tener en cuenta que no necesitamos la palabra clave public cuando invocamos el método AnotherNoInstance desde nuestra clase principal ya que el nivel de accesibilidad es correcto esta vez.
En otras palabras, cuando hablamos de miembros de la instancia, hablamos de aquellos miembros de una clase a los que no se puede llamar o acceder sin instanciar la clase. Aquellos a los que se puede acceder se llaman miembros estáticos.
Veamos una clase de estática.
123456789101112131415161718namespace SvsI{staticclassFrozen{publicstaticintvalue=99;publicstaticstringFrozenMethod(){retorno "¿Por qué harías esto? ";}}clase públicaStaticVsInstance{staticvoidMain(String[] args){ Consola.WriteLine($"El valor de la clase Frozen es {Frozen.value}"); Consola.WriteLine($"Dice la clase Frozen: {Frozen.FrozenMethod()}"); Console.Read();}}}csharp
12El valor de la clase de congelados es de 99Dice la clase de congelados: ¿Por qué harías esto? bashPor razones de accesibilidad, estamos usando la palabra clave pública una vez más. Esto es para permitirnos acceder al método y a la propiedad de la clase en sí. Los desarrolladores crean clases estáticas si cada método, propiedad o evento que la clase implementa es estático. El uso para esto es que evita que otros instancien la clase.
Cuando intentamos crear una nueva instancia de nuestra clase Congelada con esta línea,
1Congelado a =nuevoCongelado();csharp
el compilador nos dice que CS0712 no puede crear una instancia de la clase estática $0027Congelada$0027 .