扩展 class 层级

Extending class hierarchy

我有一个抽象基础class:

public abstract class BaseClass
{
    public double CommonMethodForAllSubClasses(double parameter)
    {
        //common implementation
        return 0;
    }

    public abstract double MethodThatMustBeDefinedInSubClasses(double parameter);
}

以及其下的 class 层次结构。

我想在另一个程序集中为基础 class 及其子 class 制作一个扩展 class。我想用一个静态的 class 和一个接收参数的方法来做到这一点:

public static Method(this BaseClass, ...)

但我希望为 BaseClass 的所有子class定义这个静态方法。我知道我不能做一个静态抽象方法,但我想避免在 class 本身中实现这些方法......如果编译器 "tells me" 这些方法必须是为 sub-classes.

重新定义

But I want this static Method to be defined for all subclasses from BaseClass.

您的扩展方法可以从派生 class 的实例中调用。但我想你不是那个意思。

And it would be very good that the compiler "tells me" that these methods must be redefined for sub-classes.

在基础 class 上将其作为常规 abstract 方法实施是实现该目标的唯一方法。

这是你想要的吗?

public abstract class BaseClass
{
    protected abstract void MethodThatMustBeDefinedInSubClasses();
}

public class ChildClass : BaseClass
{
    protected override void MethodThatMustBeDefinedInSubClasses()
    {
        Console.WriteLine("Do");
    }
}

public static class BaseClassExtensions
{
    public static void DoExtension(this BaseClass foo) { }

    public static void DoExtension(this ChildClass bar) {}
}

您可以为层次结构中的每个派生 class 指定扩展方法,并为其提供特定的实现。

关于"compiler telling you"关于一个扩展方法,我认为那是不可能的,因为扩展方法就是"syntactic sugar"。扩展方法可以这样使用:

var foo = new BaseClass();
foo.DoExtension();

但实际上就像一个普通的静态 class:

var foo = new BaseClass();
BaseClassExtensions.DoSomething(foo);

并且编译器无法警告您应该使用应接受特定类型的方法创建静态 class。