2010-11-08 39 views
145

¿Qué significa cuando agrega la palabra clave estática a un método?¿Qué es un "método estático" en C#?

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

se puede añadir la palabra clave static a clase? ¿Qué significaría entonces?

+6

Puede usar el método estático sin crear una instancia de esa clase simplemente por class_name.static_method_name(); –

Respuesta

260

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

Una clase static es una clase que solo puede contener static miembros 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; } 
} 

Con el fin de llamar InstanceMethod, se 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 
+20

¿Es como un método de clase en lugar de un método de instancia? – Moshe

+1

@Moshe: Sí, eso es correcto. –

+2

@Moshe: Exactamente. Con un método estático, no necesita una instancia de la clase para llamar al método, solo la clase. –

4

función estática significa que se asocia con la clase (no es un caso particular de clase, pero la clase en sí misma) y se puede invocar incluso cuando no existan instancias de clase.

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

-3

La palabra clave estática, cuando se aplica a una clase, le dice al compilador 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 una buena explicación de cómo, cuándo y dónde ver MSDN

+8

No, una clase estática * nunca * instanciada. Dado que todo en él es estático, ¿por qué querrías * instanciarlo? –

+1

Una clase 'estática' no tiene instancia en absoluto. – SLaks

+4

Lo siento chicos, no entiendo ... Dije que se creó una sola instancia y que no se puede crear una nueva. Seguramente una instancia única, estática, se crea; de lo contrario, el código no sería invocable. –

-1

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 la función sea estática, restringirá el acceso de esa función dentro de ese archivo.

10

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. miembros de la clase estáticas se declaran mediante la palabra clave estática antes de que el tipo de retorno de la membe

3

Poco no se puede crear una instancia de la clase estática: Ex:

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

no se puede hacer así:

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

Usted puede hacer solamente:

myStaticClass.someFunction(); 
16

Desde otro punto de vista: Considere que desea hacer algunos cambios en una sola Cadena. por ejemplo, desea hacer que las letras sean mayúsculas y así sucesivamente. usted hace otra clase llamada "Herramientas" para estas acciones. no hay sentido de crear 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"). Así que usamos palabras clave estáticas para usar la clase "Herramientas" sin hacer ninguna instancia de eso, y cuando presiona punto tras nombre de clase ("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(); 

    } 
} 
} 
0

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

Cuestiones relacionadas