Как сделать новую static переменную в наследнике? Или как обойтись без этого?

В языке программирования C#, статические переменные являются переменными, которые разделяются между всеми экземплярами класса и доступны через сам класс, вместо конкретного экземпляра. Они удобны для хранения информации, которая является общей для всех экземпляров класса.

Если вы хотите создать новую статическую переменную в наследнике, вам следует использовать модификатор static в объявлении переменной. При этом, переменная будет доступна как через класс-наследник, так и через класс-родитель.

Например, у нас есть базовый класс ParentClass и класс-наследник ChildClass. Для создания новой статической переменной в классе-наследнике, вам необходимо объявить ее с использованием модификатора static:

public class ParentClass
{
    public static int parentVariable = 10;
}

public class ChildClass : ParentClass
{
    public static int childVariable = 20;
}

Теперь у нас есть две статические переменные: parentVariable, объявленная в базовом классе ParentClass, и childVariable, объявленная в классе-наследнике ChildClass. Обе переменные будут доступны и из ParentClass, и из ChildClass.

Console.WriteLine(ParentClass.parentVariable); // Выведет: 10
Console.WriteLine(ChildClass.childVariable); // Выведет: 20

Однако, если вам необходимо иметь новую переменную, доступную только из класса-наследника и недоступную из базового класса, вы можете использовать другой подход.

Вы можете создать новую статическую переменную в классе-наследнике и скрыть статическую переменную с тем же именем из родительского класса, используя ключевое слово new. В этом случае, переменная будет доступна только через класс-наследник.

public class ParentClass
{
    public static int parentVariable = 10;
}

public class ChildClass : ParentClass
{
    public new static int parentVariable = 20;
}

Теперь у нас есть две статические переменные с именем parentVariable, но они связаны с разными классами. Первая переменная parentVariable будет доступна как через ParentClass, так и через ChildClass. Вторая переменная parentVariable будет доступна только через ChildClass.

Console.WriteLine(ParentClass.parentVariable); // Выведет: 10
Console.WriteLine(ChildClass.parentVariable); // Выведет: 20

В результате, у вас есть два варианта для создания новой статической переменной в классе-наследнике. Если вам необходимо иметь новую переменную, которая будет доступна из базового класса и его наследников, используйте модификатор static. Если же вам необходимо иметь новую переменную, недоступную из базового класса, используйте модификатор new.