c# - 有没有办法强制派生类实现抽象类或嵌套在基类中的接口(interface)?

标签 c# inheritance interface overriding 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");
  }
}

我希望每个派生类都实现自己的 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/

相关文章:

c# - 如何对 C# 接口(interface)进行版本控制?

c# - 如何使用 C# 更新 cosmos db 文档

java - Jaxb 没有发现我的基类的正确儿子

java - 接口(interface)是否应该定义特定于实现的枚举值?

c++ - 隐式与显式接口(interface)

c# - 将结构转换为继承自同一接口(interface)的类

c# - 从代码隐藏访问 javascript 动态属性

c# - 使用 taglib# 提取 mp3 标签

android - android studio 不识别 Activity 继承

C++ 虚函数表现怪异