有没有办法强制派生类实现抽象类或嵌套在基类中的接口?

时间:2015-02-10 21:49:53

标签: c# inheritance interface override abstract-class

我有这个抽象类:

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");
  }
}

我希望每个派生类都能实现自己的选项类,以便它们可以拥有自己的参数。

所以搜索类必须使用所需的属性实现自己的选项类,例如“ includesubfolders ”,“ casesensitive “等等。

同时移动任务可以实现它自己:“覆盖”等等。

在抽象类中使属性和方法抽象强制派生类实现它们自己但在同一个类中定义嵌套抽象类或接口不会强制它的派生类实现它们自己的。

我可以在每个派生类中单独定义每个属性但是这样做会失败,因为我想在稍后的Execute方法中查询Task.Options中的属性。

我也尝试过动态对象,但这带来了其他所有问题。

2 个答案:

答案 0 :(得分:2)

您可以使用通用

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");
    }
}

答案 1 :(得分:1)

您无法强制执行嵌套类实现,但可以为选项添加属性

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的类中。