有没有办法强制派生 class 实现抽象 class 或嵌套在基础 class 中的接口?
Is there a way to force a derived class to implement an abstract class or an interface nested in base class?
我有这个摘要class:
public abstract class Task
{
public string ID {get; set;}
public string Name {get; set;}
public abstract class Options{};
public abstract void Execute();
}
我有其他 classes 扩展这个 class:
public class Copy : Task
{
public override void Execute()
{
Console.Write ("running");
}
}
我希望每个派生的 class 实现自己的 Options class 以便它们可以有自己的参数。
所以 Search class 必须实现它自己的 Options class 和它需要的属性,例如如“includesubfolders”、“casesensitive”等。
同时 移动 任务可以实现它自己的:“覆盖”等..
在抽象中使属性和方法抽象化 class 强制派生 classes 实现它们自己的但在相同的 class 中定义嵌套抽象 class 或接口] 不强制派生 classes 实现他们自己的。
我可以在每个派生的 class 中单独定义每个 属性 但这违背了目的,因为我想稍后在 Execute 方法中查询 Task.Options 中的属性。
我也尝试了动态对象,但这带来了其他问题。
您不能强制执行嵌套的 class 实现,但您可以为选项添加 属性:
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
class 的实现嵌套在实现 Task
.
的 class 中
您可以使用通用
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");
}
}
我有这个摘要class:
public abstract class Task
{
public string ID {get; set;}
public string Name {get; set;}
public abstract class Options{};
public abstract void Execute();
}
我有其他 classes 扩展这个 class:
public class Copy : Task
{
public override void Execute()
{
Console.Write ("running");
}
}
我希望每个派生的 class 实现自己的 Options class 以便它们可以有自己的参数。
所以 Search class 必须实现它自己的 Options class 和它需要的属性,例如如“includesubfolders”、“casesensitive”等。
同时 移动 任务可以实现它自己的:“覆盖”等..
在抽象中使属性和方法抽象化 class 强制派生 classes 实现它们自己的但在相同的 class 中定义嵌套抽象 class 或接口] 不强制派生 classes 实现他们自己的。
我可以在每个派生的 class 中单独定义每个 属性 但这违背了目的,因为我想稍后在 Execute 方法中查询 Task.Options 中的属性。
我也尝试了动态对象,但这带来了其他问题。
您不能强制执行嵌套的 class 实现,但您可以为选项添加 属性:
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
class 的实现嵌套在实现 Task
.
您可以使用通用
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");
}
}