我有这个抽象类:
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”、“区分大小写”,等等。
同时 Move 任务可以实现它自己的:“overwrite”等。
在抽象类中使属性和方法抽象化会强制派生类实现它们自己的,但在同一类中定义嵌套抽象类或接口(interface)不会强制它的派生类实现它们自己的。
我可以在每个派生类中单独定义每个属性,但这违背了目的,因为我想稍后在 Execute 方法中查询 Task.Options 中的属性。
我也尝试过动态对象,但这带来了其他问题。
最佳答案
你可以使用泛型
public abstract class Options{};
public class CopyOptions : Options
{
}
public abstract class Task<T> 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<CopyOptions>
{
public override void Execute()
{
Console.Write("running");
}
}
关于c# - 有没有办法强制派生类实现抽象类或嵌套在基类中的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28442519/