У меня есть абстрактный базовый класс:Расширение иерархии классов
public abstract class BaseClass
{
public double CommonMethodForAllSubClasses(double parameter)
{
//common implementation
return 0;
}
public abstract double MethodThatMustBeDefinedInSubClasses(double parameter);
}
И иерархия классов под ним.
Я хочу сделать в другой сборке класс расширения для класса Base и его подклассов. Я думал сделать это со статическим классом с методами, которые получают в качестве параметра:
public static Method(this BaseClass, ...)
Но я хочу, чтобы это статический метод, чтобы определить для всех подклассов от BaseClass. Я знаю, что не могу выполнять статический абстрактный метод, но я хочу избежать реализации этих методов в самом классе ... И было бы очень хорошо, что компилятор «говорит мне», что эти методы должны быть переопределены для подклассов ,
Если вы хотите, чтобы компилятор напомнил вам, вам придется использовать абстрактные методы или интерфейсы. Вы можете создавать методы расширения для разных дочерних типов, но это будет работать только так, как ожидается, когда типы известны во время компиляции. Возможно, лучший подход здесь заключается в объединении методов расширения (высокоуровневая, независимая от типа логика) с абстрактными методами (низкоуровневый, специфичный по типу код). –