Las clases estáticas se usan cuando no se van a crear instancias de objetos. Se obtiene un "ejemplo" de esa clase - no se puede hacer cosas como:
MyStaticClass m = new MyStaticClass();
m.SomeFunc();
cuando se tiene una clase estática. En cambio, lo usarías usando el nombre de la clase en sí. Algo como:
MyStaticClass.SomeFunc();
¿Qué utilizaría para realizar un seguimiento de cada objeto del Cliente? Podría usar algún tipo de colección para contener esto. De acuerdo, en un sistema real habría algún tipo de pieza de persistencia, probablemente una base de datos, para contener los datos. Pero se podría acaba de hacer algo como:
IEnumerable<Customer> Customers = new List<Customer>();
Y a continuación, añadir a sus clientes a esa lista
Customers.Add(new Customer() { ... });
Volver a la pregunta sobre los métodos estáticos ...
Por lo tanto, el problema aquí es que no va a hacer referencia a los miembros de la instancia en un método estático, por lo que no usaría métodos estáticos para actualizar la dirección de un cliente en particular. Asumiendo que su clase Cliente parecía:
public class Customer
{
public string Address { get; set; }
}
No se podía utilizar un método estático como
public static void SetAddress()
ya que cada cliente (presumiblemente) tiene una dirección diferente. No se pudo acceder a la dirección del cliente allí porque no es estático. ¿Obtén éso? En cambio, usaría un método estático si quisiera hacer algo que no necesitara lidiar con datos de instancia. Utilizo métodos estáticos para cosas como funciones de utilidad.
public static double ComputeSomething(double someVal) { ... }
Aquí, la función ComputeSomething puede ser llamado por nadie como:
var result = MyStaticClass.ComputeSomething(3.15);
La lección aquí es que estáticas clases no se utilizan para crear instancias de objetos, sino que se utilizan realmente como una contenedor conveniente para mantener las funciones. Las funciones estáticas son las que pueden estar en una clase no estática pero no pueden acceder a ninguno de los datos de instancia.
Un lugar donde se usaría una función estática sería para el patrón Singleton. Haces que el constructor no sea público para que la gente no pueda llamarlo, y en su lugar proporciona un método estático en la clase para devolver la única instancia de la clase. Algo como:
public class MySingleton
{
private static MySingleton instance;
private MySingleton() {}
public static MySingleton Instance
{
get
{
if (instance == null)
{
instance = new MySingleton();
}
return instance;
}
}
}
@slugster Fair point. – nickhar
La lista y otros tipos de colecciones son importantes. Consulte también MSDN: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx –
varg