usar programacion modificador metodos metodo estaticos cuando clases c# design oop

c# - modificador - static programacion



¿Cuándo debería escribir métodos estáticos? (7)

Aquí hay algunos ejemplos de cuándo podría querer usar métodos estáticos:

1) Cuando la función no hace uso de ninguna variable miembro. No tiene que usar un método estático aquí, pero generalmente ayuda si lo hace.

2) Cuando se usan métodos de fábrica para crear objetos. Son particularmente necesarios si no conoce el tipo que se creará de antemano: por ejemplo

class AbstractClass { static createObject(int i) { if (i==1) { return new ConcreteClass1(); } else if (i==2) { return new ConcreteClass2(); } } }

3) Cuando controlas o haces un seguimiento del número de instancias de la clase. El Singleton es el ejemplo más usado de esto.

4) Al declarar constantes.

5) Operaciones tales como géneros o comparaciones que operan en múltiples objetos de una clase y no están vinculados a ninguna instancia particular.

6) Cuando se tiene que hacer un manejo especial antes de la primera instanciación de un objeto.

Entonces entiendo qué es un método o campo estático, solo me pregunto cuándo usarlos. Es decir, cuando se escribe código, el diseño se presta a usar métodos y campos estáticos.

Un patrón común es utilizar métodos estáticos como fábrica estática, pero esto podría hacerse fácilmente al sobrecargar un constructor. ¿Correcto? Por ejemplo:

var bmp = System.Drawing.Bitmap.LoadFromFile("Image01.jpg");

En cuanto a los campos estáticos, ¿crear objetos singelton es su mejor uso?


Lo dejo claro al recordar que los métodos de instancia funcionan en / dentro de objetos individuales mientras que los métodos estáticos hacen algo para la Clase.

En el caso de LoadFromFile (), desea un método estático porque desea una referencia nula si la carga falla: la instancia aún no existe. Si lo implementó como un constructor, tendría que lanzar una excepción en caso de falla.

Otros buenos usos para estática: Compare (obj a, obj b), Delete (obj a) para objetos de datos (un objeto no puede eliminarse a sí mismo ya que su referencia aún está presente), o static Classes para código de procedimiento que honestamente no puede ser modelado en un objeto.


Los métodos estáticos generalmente son útiles para operaciones que no requieren ningún dato de una instancia de la clase (a partir de this ) y pueden realizar su propósito previsto únicamente utilizando sus argumentos.
Un ejemplo simple de esto sería un método Point::distance(Point a, Point b); que calcula la distancia entre dos puntos y no requiere una instancia.

Los campos estáticos son útiles, entre otros, para las constantes que no cambian demasiado a menudo y que son utilizadas por todas las instancias de una clase.


Puede usar métodos estáticos cuando el cliente de la clase no tiene una instancia de la clase con la que trabajar. Por ejemplo, el patrón de diseño de Singleton se usa para garantizar que solo exista una instancia de una clase en el sistema. Requiere que los constructores de Singleton sean privados para que el cliente no pueda crear instancias.

Entonces, si no puede crear una instancia, ¿cómo accede a los métodos de instancia de la clase? Llamando a un método estático que devuelve la instancia Singleton de la clase.

Esto es, por supuesto, solo un escenario, pero hay muchos otros.


Yo diría que use métodos estáticos siempre que tenga funciones que sean independientes del estado de la instancia, es decir. no depende de ningún campo de instancia.

El estado menos local del que depende un método, es más fácil de entender, por lo que la static es una señal útil para el lector del código.


Da una mejor idea de la intención cuando utilizas una fábrica estática: también te permite tener diferentes fábricas que toman los mismos tipos de argumentos pero tienen un significado diferente. Por ejemplo, imagine si Bitmap tenía LoadFromResource (cadena) - no sería posible tener dos constructores que tomaran cadena.

EDITAR : De stevemegson en los comentarios

Una fábrica estática también puede devolver nulo y puede devolver más fácilmente una instancia que obtuvo de la memoria caché. Muchas de mis clases tienen un FromId (int) estático para obtener una instancia de una clave principal, devolviendo una instancia en caché existente si tenemos una.


Debe usar métodos estáticos siempre que tenga una función que no dependa de un objeto particular de esa clase.

No es perjudicial añadir la palabra clave estática: no romperá ninguno de los códigos que se refieren a ella. Entonces, por ejemplo, el siguiente código es válido ya sea que tenga o no la palabra clave ''estática'':

class Foo { public Foo(){} public static void bar(){} // valid with or without ''static'' public void nonStatic(){ bar(); } } ... Foo a = new Foo(); a.bar();

Por lo tanto, debe agregar "estática" a los métodos que pueda.