作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个抽象类:
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/
我是一名优秀的程序员,十分优秀!