有没有办法强制派生类实现抽象类或嵌套在基类中的接口? [英] Is there a way to force a derived class to implement an abstract class or an interface nested in base class?

查看:114
本文介绍了有没有办法强制派生类实现抽象类或嵌套在基类中的接口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个抽象类:

public abstract class Task
{
  public string ID {get; set;}
  public string Name {get; set;}
  public abstract class Options{};

  public abstract void Execute();
}

我还有其他类扩展此类:

I have other classes extending this class:

public class Copy : Task
{
  public override void Execute()
  {
    Console.Write ("running");
  }
}

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

I'd like each derived class to implement their own Options class so they can have their own parameters.

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

So Search class have to implement it's own Options class with the properties it needs, such as "includesubfolders", "casesensitive", etc..

同时移动任务可以实现它拥有:覆盖等等。

Meanwhile Move task can implement it's own: "overwrite", etc..

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

Making properties and methods abstract in an abstract class force derived classes to implement their own but defining a nested abstract class or an interface in the same class does not force it's derived classes implement their own.

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

I can define each property individually in each derived class but that defeats the purpose since I like to query the properties in Task.Options later in the Execute method.

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

I tried dynamic object as well, but that brought whole other issues.

推荐答案

您可以使用通用

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

这篇关于有没有办法强制派生类实现抽象类或嵌套在基类中的接口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆