usar son qué métodos método metodos metodo los instancia estáticos estaticos estatica entre diferencia cuando clases clase c# oop static static-methods non-static

c# - son - ¿Cuál es la diferencia entre los métodos estáticos en una clase no estática y los métodos estáticos en una clase estática?



qué es método de clase y método de instancia (5)

Tengo dos clases, clase A y clase B:

static class ClassA { static string SomeMethod() { return "I am a Static Method"; } } class ClassB { static string SomeMethod() { return "I am a Static Method"; } }

Quiero saber cuál es la diferencia entre ClassA.SomeMethod(); y ClassB.SomeMethod();

Cuando se puede acceder a ambos sin crear una instancia de la clase, ¿por qué necesitamos crear una clase estática en lugar de simplemente usar una clase no estática y declarar los métodos como estáticos?


La única diferencia es que los métodos estáticos en una clase no estática no pueden ser métodos de extensión .

En otras palabras, esto no es válido:

class Test { static void getCount(this ICollection<int> collection) { return collection.Count; } }

mientras que esto es válido:

static class Test { static void getCount(this ICollection<int> collection) { return collection.Count; } }



Si tiene una clase no estática que contiene solo métodos estáticos, puede crear una instancia de esa clase. Pero no puedes usar esa instancia de manera significativa. NB: cuando no define un constructor, el compilador agrega uno para usted.

Una clase estática no tiene un constructor, por lo que no puede crear una instancia de la misma. Además, el compilador da un error cuando le agrega un método de instancia (donde se refería a un método estático).


Un método estático pertenece a la clase y un método no estático pertenece a un objeto de una clase. Es decir, un método no estático solo se puede invocar en un objeto de una clase a la que pertenece. Un método estático solo puede acceder a miembros estáticos. Un método no estático puede acceder a los miembros estáticos y no estáticos porque en el momento en que se llama al método estático, la clase puede no crearse una instancia (si se llama a la clase en sí). En el otro caso, un método no estático solo puede invocarse cuando la clase ya ha sido instanciada. Un método estático es compartido por todas las instancias de la clase. Cada vez que se llama a un método en C ++ / Java / C #, se pasa un argumento implícito (la referencia ''this'') junto con / sin los otros parámetros. En el caso de una llamada a un método estático, la referencia ''this'' no se pasa porque los métodos estáticos pertenecen a una clase y, por lo tanto, no tienen la referencia ''this''.


Una clase estática solo puede contener miembros estáticos.

Un método estático garantiza que, incluso si creara varios objetos de clase B, solo utilizaría una única función compartida de SomeMethod.

Técnicamente, no hay diferencia, excepto que SomeMethod de ClassA debe ser estático.