有没有办法强制派生类实现抽象类或嵌套在基类中的接口?
我有这个抽象类:
public abstract class Task { public string ID {get; set;} public string Name {get; set;} public abstract class Options{}; public abstract void Execute(); }
我有其他类扩展这个类:
public class Copy : Task { public override void Execute() { Console.Write ("running"); } }
我希望每个派生类都实现自己的Options类,以便它们可以拥有自己的参数。
因此, Search类必须使用它需要的属性来实现它自己的Options类,例如“ includesubfolders ”,“ casesensitive ”等。
同时Move任务可以实现它自己:“ 覆盖 ”等。
在抽象类中使属性和方法抽象强制派生类来实现它们自己但在同一个类中定义嵌套抽象类或接口不会强制它的派生类实现它们自己的类。
我可以在每个派生类中单独定义每个属性但由于我想在稍后的Execute方法中查询Task.Options中的属性而失败。
我也尝试过动态对象,但这带来了其他所有问题。
您可以使用通用
public abstract class Options{}; public class CopyOptions : Options { } public abstract class Task where T : Options { public string ID {get; set;} public string Name {get; set;} public T Options { get; set; } public abstract void Execute(); } public class Copy : Task { public override void Execute() { Console.Write("running"); } }
您不能强制执行嵌套类实现,但可以为选项添加属性 :
public abstract class Task { public string ID {get; set;} public string Name {get; set;} public Options Options {get; set;} public abstract void Execute(); public abstract class Options{}; }
但是,没有办法强制将Options
类的实现嵌套在实现Task
的类中。