c# - tipos - Campos estáticos en una clase base y clases derivadas
¿ en c# qué es el polimorfismo? (2)
En una clase base abstract
si tenemos algunos campos static
, ¿qué les sucede a ellos?
¿Es su alcance las clases que heredan de esta clase base o solo del tipo del que hereda (cada subclase tiene su propia copia del campo static
de la clase base abstract
)?
Como se señaló en otra respuesta, el campo estático de la clase base se compartirá entre todas las subclases. Si necesita una copia por separado para cada subclase final, puede usar un diccionario estático con un nombre de subclase como clave:
class Base
{
private static Dictionary<string, int> myStaticFieldDict = new Dictionary<string, int>();
public int MyStaticField
{
get
{
return myStaticFieldDict.ContainsKey(this.GetType().Name)
? myStaticFieldDict[this.GetType().Name]
: default(int);
}
set
{
myStaticFieldDict[this.GetType().Name] = value;
}
}
void MyMethod()
{
MyStaticField = 42;
}
}
static
miembros static
son completamente específicos para la clase que declara ; las subclases no obtienen copias separadas. La única excepción aquí es genéricos; si un tipo genérico abierto declara campos estáticos, el campo es específico para esa combinación exacta de argumentos de tipo que componen el tipo genérico cerrado; es decir, Foo<int>
tendría campos estáticos separados para Foo<string>
, asumiendo que los campos están definidos en Foo<T>
.