簡體   English   中英

有沒有一種方法可以強制派生類實現抽象類或嵌套在基類中的接口?

[英]Is there a way to force a derived class to implement an abstract class or an interface nested in base 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類必須使用所需的屬性(例如“ includesubfolders ”,“ 區分大小寫 ”等)來實現自己的Options類。

同時Move任務可以實現它自己的:“ 覆蓋 ”等。

在抽象類中使屬性和方法抽象化會強制派生類實現自己的類,但是在同一類中定義嵌套的抽象類或接口並不強制其派生類實現自己的類。

我可以在每個派生類中分別定義每個屬性,但由於我想稍后在Execute方法中查詢Task.Options中的屬性,因此無法達到目的。

我也嘗試過動態對象,但這帶來了其他所有問題。

您不能強制執行嵌套類的實現,但是可以為Options添加一個屬性

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

您可以使用通用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM