有没有办法强制派生 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");
    }
}