Наследование класса со статическими полями и методами
Как будет работать наследование от класса, который имеет статические поля и/или методы? Можно ли сделать статическое поле базового класса статическим в рамках всех дочерних классов, а не только в рамках экземпляров одного дочернего класса.
В примере основной класс A и два дочерних B, C. В рамках экземпляров класса B number действительно статичный, между экземплярами B и C нет. Как преодолеть это разделение? Возможно ли это сделать без изменения логики наследования или наследование в такой ситуации плохо? Общий функционал классов B и C (выполняют они одну функцию со своими дополнениями) вынесен в A, при этом данные они обрабатывают одни.
public class A {
static protected int number;
static protected void show() {
Debug.Log(number);
}
/ * ... */
}
public class B : A {
void update() {
number++;
}
/ * ... */
}
public class C : A {
void update() {
number++;
}
/ * ... */
}
Ответы (1 шт):
Пример со статичным полем и наследованием:
partial class Program
{
static void Main(string[] args)
{
Sub1 xSub1 = new Sub1();
Sub2 xSub2 = new Sub2();
Pub.num1 = 111;
Sub1.num1 = 222;
Sub2.num1 = 333;
xSub1.Num = 444;
xSub2.Num = 987;
// Ошибок нет
Console.WriteLine(xSub1.Num); // "987"
Console.WriteLine(xSub2.Num); // "987"
Console.WriteLine(Pub.num1); // "987"
Pub.Show(); // "987"
Sub1.Show(); // "987"
Sub2.Show(); // "987"
}
}
public class Pub
{
public static int num1; // Обычно статичное поле делают приватным
public int Num { get => num1; set => num1 = value; } // и осуществляют доступ через публичное поле
public static void Show()
{
Console.WriteLine(num1);
}
}
public class Sub1 : Pub
{
}
public class Sub2 : Pub
{
}