Puede usar el método estático sin crear una instancia de esa clase simplemente por class_name.static_method_name ();
Javed Akram
A nivel de programación, tenemos la sensación de que podemos llamar a un método estático sin crear una instancia de una clase / tipo. Internamente es no el caso. CLR administra internamente una instancia especial llamada instancia de tipo para administrar la llamada a métodos estáticos. Por favor vea esta respuesta. Es muy intrigante.
RBT
Respuestas:
313
Una staticfunción, a diferencia de una función regular ( instancia ), no está asociada con una instancia de la clase.
Una staticclase es una clase que solo puede contener staticmiembros y, por lo tanto, no se puede crear una instancia.
Entonces, ¿es como un método de clase en lugar de un método de instancia?
Moshe
44
@Moshe: Exactamente. Con un método estático, no necesita una instancia de la clase para llamar al método, solo la clase.
Binario Worrier
3
Pero, ¿existe realmente algún tipo de limitación técnica que impida llamar a un método estático en una instancia? Si el compilador lo permitiera, ¿cuál es el peligro de que sea accesible?
kroonwijk
2
@kroon: No tendría ningún sentido. Los métodos de instancia en realidad solo toman una instancia como primer parámetro oculto. Los métodos estáticos no lo hacen. Vea mi publicación de blog: blog.slaks.net/2011/06/open-delegates-vs-closed-delegates.html
SLaks
Donde "StaticMethod" es método de clase e "InstanceMethod" es un método de instancia de clase SomeClass
Usman Younas
26
Desde otro punto de vista: considere que desea realizar algunos cambios en una sola cadena. por ejemplo, desea que las letras sean mayúsculas, etc. crea otra clase llamada "Herramientas" para estas acciones. no tiene sentido 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 palabras clave estáticas para usar la clase "Herramientas" sin hacer ninguna instancia de eso, y cuando presiona punto después del nombre de la 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{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Usar "hacer cambios en una cadena" es un mal ejemplo: las cadenas son inmutables y no se pueden cambiar. Pero, de lo contrario, la explicación tiene sentido (sustituyendo una clase no inmutable por cadena)
Flydog57
13
Un método, campo, propiedad o evento estático se puede invocar 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 los campos y eventos estáticos, y los métodos y propiedades estáticos solo pueden acceder a los campos 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 seno y coseno. Los miembros de clase estática se declaran utilizando la palabra clave estática antes del tipo de retorno del membe
La función estática significa que está asociada con la clase (no con una instancia particular de la clase, sino con la clase misma) y puede invocarse incluso cuando no existan instancias de clase.
La clase estática significa que la clase contiene solo miembros estáticos.
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. No hace falta 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 variables estáticas.
Al hacer que la función sea 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 compilador que cree una sola instancia de esa clase. Entonces no es posible 'nuevo' una o más instancias de la clase. Todos los métodos en una clase estática deben ser declarados 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 del factor.
Para una buena explicación de cómo, cuándo y dónde ver MSDN
No, una clase estática nunca se instancia. Dado que todo en él es estático, ¿por qué querrías instanciarlo?
Jon Skeet
1
Una staticclase no tiene ninguna instancia en absoluto.
SLaks
44
Lo siento chicos, no entiendo ... Dije que se crea una única instancia y no se puede crear una nueva. ¿Seguramente se crea una única instancia estática, de lo contrario el código no sería invocable?
Dave Arkley
2
Una clase estática tiene una instancia, de hecho dos, simplemente no son instancias del Tipo. Existirá una clase estática en el montón como un objeto de tipo [Foo] (tabla de búsqueda de métodos, etc. para el JIT) y un objeto especial System.Type utilizado para la inicialización.
mccainz
Una clase puede declararse estática, lo que indica que contiene solo miembros estáticos. No es posible crear instancias de una clase estática con la nueva palabra clave. Las clases estáticas se cargan automáticamente mediante .NET Framework Common Language Runtime (CLR) cuando se carga el programa o el espacio de nombres que contiene la clase.
Respuestas:
Una
static
función, a diferencia de una función regular ( instancia ), no está asociada con una instancia de la clase.Una
static
clase es una clase que solo puede contenerstatic
miembros y, por lo tanto, no se puede crear una instancia.Por ejemplo:
Para llamar
InstanceMethod
, necesita una instancia de la clase:fuente
Desde otro punto de vista: considere que desea realizar algunos cambios en una sola cadena. por ejemplo, desea que las letras sean mayúsculas, etc. crea otra clase llamada "Herramientas" para estas acciones. no tiene sentido 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 palabras clave estáticas para usar la clase "Herramientas" sin hacer ninguna instancia de eso, y cuando presiona punto después del nombre de la clase ("Herramientas") puede tener acceso a los métodos que desee.
fuente
Un método, campo, propiedad o evento estático se puede invocar 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 los campos y eventos estáticos, y los métodos y propiedades estáticos solo pueden acceder a los campos 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 seno y coseno. Los miembros de clase estática se declaran utilizando la palabra clave estática antes del tipo de retorno del membe
fuente
La función estática significa que está asociada con la clase (no con una instancia particular de la clase, sino con la clase misma) y puede invocarse incluso cuando no existan instancias de clase.
La clase estática significa que la clase contiene solo miembros estáticos.
fuente
En breve no puede crear una instancia de la clase estática: Ej:
No puedes hacer así:
Solo puedes hacer:
fuente
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. No hace falta decir que el resultado varía con el cambio en el valor de los parámetros.
fuente
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 variables estáticas.
Al hacer que la función sea estática, restringirá el acceso de esa función dentro de ese archivo.
fuente
Núcleo de la palabra clave estática que tendrá solo una copia en RAM de este (método / variable / clase) que se comparte para todas las llamadas
fuente
La palabra clave estática, cuando se aplica a una clase, le dice al compilador que cree una sola instancia de esa clase. Entonces no es posible 'nuevo' una o más instancias de la clase. Todos los métodos en una clase estática deben ser declarados 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 del factor.
Para una buena explicación de cómo, cuándo y dónde ver MSDN
fuente
static
clase no tiene ninguna instancia en absoluto.