扩展类层次结构
本文关键字:层次结构 扩展 | 更新日期: 2023-09-27 18:04:56
我有一个抽象基类:
public abstract class BaseClass
{
public double CommonMethodForAllSubClasses(double parameter)
{
//common implementation
return 0;
}
public abstract double MethodThatMustBeDefinedInSubClasses(double parameter);
}
和它下面的类层次。
我想在另一个程序集中为基类及其子类创建一个扩展类。我想用一个静态类和一个方法来做它,它接收作为参数:
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);
编译器不能警告你,你应该创建一个静态类,它的方法应该接受特定的类型