В C# 11 в интерфейсах появились статические абстрактные члены.
Но судя по моим экспериментам, он заставляет только прямого дочернего элемента реализовывать эти статические абстрактные< /код> члены. Этот статический модификатор абстрактного нельзя использовать в абстрактном классе.
Пример того, что я пытаюсь сделать, который не компилируется:
public interface IMyInterface
{
public static abstract void DoSomething();
}
public abstract class MyAbstractClass : IMyInterface
{
public static abstract void DoSomething(); //Error: Overridable method cannot be static
}
public class MyClass : MyAbstractClass
{
public static override void DoSomething() => Console.Log("Hello, World!");
}
Но без абстрактного класса между ними MyClass компилируется нормально:
public class MyClass : IMyInterface
{
public static void DoSomething() => Console.Log("Hello, World!");
}
Я что-то пропустил? И почему это так?
Я думаю, что уже знаю обходной путь моего случая, но этот способ не задействует каждый дочерний элемент MyAbstractClass для реализации IMyInterface, точно так же, как мы делали бы это с обычными членами интерфейса.
public interface IMyInterface
{
public static abstract void DoSomething();
}
public abstract class MyAbstractClass
{
}
public class MyClass : MyAbstractClass, IMyInterface
{
public static void DoSomething() => Console.Log("Hello, World!");
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... ct-classes
Статические абстрактные члены в интерфейсах через абстрактные классы? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
C# 11. Статические абстрактные члены в интерфейсах через абстрактные классы?
Anonymous » » в форуме C# - 0 Ответы
- 48 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Статические абстрактные свойства C# не могут быть перезаписаны дочерним интерфейсом.
Anonymous » » в форуме C# - 0 Ответы
- 62 Просмотры
-
Последнее сообщение Anonymous
-