繁体   English   中英

扩展类层次结构

[英]Extending class hierarchy

我有一个抽象基类:

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

    public abstract double MethodThatMustBeDefinedInSubClasses(double parameter);
}

在其下的是一个类层次结构。

我想在另一个程序集中为Base类及其子类创建一个Extension类。 我想用一个带有接收作为参数的方法的静态类来做到这一点:

public static Method(this BaseClass, ...)

但是我希望为BaseClass的所有子类定义此静态方法。 我知道我不能做一个静态的抽象方法,但我想避免在类本身中实现这些方法。这很好,编译器“告诉我”必须为子类重新定义这些方法。 。

但是我希望为BaseClass的所有子类定义此静态方法。

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

编译器“告诉我”必须为子类重新定义这些方法,这将是非常好的。

将其作为常规的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) {}
}

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

关于扩展方法的“编译器告诉您”,我认为这是不可能的,因为扩展方法只是“语法糖”。 扩展方法可以这样使用:

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

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

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

而且编译器无法警告您应该使用应接受特定类型的方法来制作静态类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM