簡體   English   中英

C#在方法的參數中繼承帶有派生類的接口

[英]c# inherits an Interface with a derivate class in a method's parameters

我有一個像這樣的抽象類:

public abstract class BaseClass
{
   ...
}

然后我有很多從BaseClass派生的類:

public class DerivedOne : BaseClass
{
    ...
}

我需要實現一個接口,以管理實現一種方法的可能性,該方法可以使用從諸如參數之類的BaseClass派生的類:

public interface IErrorParser
{
    List<string> ParseErrorMessage(BaseClass base);
}

在這一點上,如果我嘗試從接口開始實現一個類,則采用這種方式

public class FirstParser: IErrorParser
{
     public List<string> ParseErrorMessage(DerivedOne derived)
     {
        ...
     }
}

我收到錯誤:

FirstParser沒有實現接口成員'IErrorParser.ParseErrorMessage(BaseClass)'

在這一點上,我認為我需要使用泛型...但是我不明白如何...

這是因為實現接口時,必須與接口中定義的所有接口成員 (方法和屬性) 完全匹配

在你的情況下,你需要寫

 public class FirstParser: IErrorParser
 {
      public List<string> ParseErrorMessage(string defaultMessage, BaseClass service);
      {
         ...
      }
 }

接口僅包含方法,屬性,事件或索引器的簽名。 實現該接口的類或結構必須實現在接口定義中指定的接口成員。

更多信息: https : //msdn.microsoft.com/en-us/library/87d83y5b.aspx

使IErrorParser接口像這樣通用:

public interface IErrorParser<T> where T:BaseClass 
{
    List<string> ParseErrorMessage(string defaultMessage, T service);
}

然后您可以像這樣實現它:

public class FirstParser: IErrorParser<DerivedOne>
{
     public List<string> ParseErrorMessage(string defaultMessage, DerivedOne rerived)
     {
        ...
     }
}

您可以創建如下界面

public interface IErrorParser<T> where T : BaseClass
{
    List<string> ParseErrorMessage(string defaultMessage, T service);
}

如果您定義

public interface IErrorParser
{
    List<string> ParseErrorMessage(BaseClass base);
}

您可以像這樣使用DerivedClass在類中實現它

public class FirstParser: IErrorParser
{
     public List<string> ParseErrorMessage(BaseClass baseObj)
     {
        DerivedClass derived = (baseObj as DerivedClass);
        if (derived == null)
        {
           // handle null value
        }
        ...
     }
}

Edit base是一個關鍵字,您不應將其用作參數的名稱。

暫無
暫無

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

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