¿Qué es un “método estático” en C #?

¿Qué significa cuando agrega la palabra clave estática a un método?

public static void doSomething(){ //Well, do something! } 

¿Puedes agregar la palabra clave static a la clase? ¿Qué significaría entonces?

Una función static , a diferencia de una función regular ( instancia ), no está asociada con una instancia de la clase.

Una clase static es una clase que solo puede contener miembros static y, por lo tanto, no se puede crear una instancia.

Por ejemplo:

 class SomeClass { public int InstanceMethod() { return 1; } public static int StaticMethod() { return 42; } } 

Para llamar a InstanceMethod , necesita una instancia de la clase:

 SomeClass instance = new SomeClass(); instance.InstanceMethod(); //Fine instance.StaticMethod(); //Won't compile SomeClass.InstanceMethod(); //Won't compile SomeClass.StaticMethod(); //Fine 

Desde otro punto de vista: Considere que desea hacer algunos cambios en una sola Cadena. por ejemplo, quiere que las letras sean mayúsculas, etc. haces otra clase llamada “Herramientas” para estas acciones. no hay ningún sentido de hacer una instancia de la clase “Herramientas” porque no hay ningún tipo de entidad disponible dentro de esa clase (compárese con la clase “Persona” o “Profesor”). Entonces usamos la palabra clave static para usar la clase “Tools” sin hacer ninguna instancia de eso, y cuando presiona “dot after class name” (“Herramientas”) puede tener acceso a los métodos que desee.

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati")); Console.ReadKey(); } } public static class Tools { public static string ToUpperCase(string str) { return str.ToUpper(); } } } 

Un método, campo, propiedad o evento estático se puede llamar en una clase incluso cuando no se ha creado ninguna instancia de la clase. Si se crean instancias de la clase, no se pueden usar para acceder al miembro estático. Solo existe una copia de campos y eventos estáticos, y los métodos y propiedades estáticos solo pueden acceder a campos estáticos y eventos estáticos. Los miembros estáticos a menudo se usan para representar datos o cálculos que no cambian en respuesta al estado del objeto; por ejemplo, una biblioteca matemática puede contener métodos estáticos para calcular el seno y el coseno. Los miembros de la clase estática se declaran utilizando la palabra clave estática antes del tipo de devolución del membe

La función estática significa que está asociada a la clase (no a una instancia particular de la clase, sino a la propia clase) y puede invocarse incluso cuando no existan instancias de clase.

La clase estática significa que la clase contiene solo miembros estáticos.

En breve, no puede crear una instancia de la clase estática: por ejemplo:

 static class myStaticClass { public static void someFunction() { /* */ } } 

No puedes hacer esto:

 myStaticClass msc = new myStaticClass(); // it will cause an error 

Puedes hacer solo:

 myStaticClass.someFunction(); 

Cuando agrega una palabra clave “estática” a un método, significa que la implementación subyacente da el mismo resultado para cualquier instancia de la clase. Huelga decir que el resultado varía con el cambio en el valor de los parámetros

La variable estática no se vincula con el objeto de la clase. Se puede acceder usando classname. Todos los objetos de la clase compartirán la variable estática.

Al hacer que funcione como estática, restringirá el acceso de esa función dentro de ese archivo.

La palabra clave estática, cuando se aplica a una clase, le dice al comstackdor que cree una sola instancia de esa clase. No es posible entonces ‘nuevo’ una o más instancia de la clase. Todos los métodos en una clase estática deben declararse estáticos.

Es posible, y a menudo deseable, tener métodos estáticos de una clase no estática. Por ejemplo, un método de fábrica cuando crea una instancia de otra clase a menudo se declara estático ya que esto significa que no se requiere una instancia particular de la clase que contiene el método de factor.

Para obtener una buena explicación de cómo, cuándo y dónde, vea MSDN