[英]C# Error CS0738 when class inherits from interface and with type that inherits from interfce type method
[英]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.