una tipos redefinición qué que programacion poo polimorfismo objetos objeto métodos llamar herencia form ejercicios ejemplos derivadas derivada definicion clases clase baja abstracta c# static scope

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> .