Наследование класса со статическими полями и методами

Как будет работать наследование от класса, который имеет статические поля и/или методы? Можно ли сделать статическое поле базового класса статическим в рамках всех дочерних классов, а не только в рамках экземпляров одного дочернего класса.

В примере основной класс 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
{
}
→ Ссылка