[英]Types in interfaces c#
在java中,如果我有類似的東西,似乎可以正常工作,但是在c#版本中:
public interface MyIterator<T>: IEnumerator<T>
{
BaseClass<T> GetBaseClass();
}
和:
public interface IBaseClass<T>: IEnumerator<T>{
bool Remove(T e);
IEnumerator<T> Search(T e);
bool Contains(T e);
bool IsEmpty();
int Size();
}
但是在實現中我有:
public abstract class BaseClass<T> : IBaseClass<T>
{
public MyIterator<T> Search(T e)
{
..}
它不允許我有不同的返回類型,唯一允許的類型是IEnumerator<T>
(從接口)。我知道它有點連線,但這是在給定上下文中的要求。 例如,其他類:
public class SpecializedContainer<T> : BaseClass<T>
將使用BaseClass)
您缺少類型參數,您的IBaseClass
定義應具有類型參數T
(除非它們是另一個類的一部分)。
您確定IBaseClass
實現IEnumerator<T>
嗎? 通常它將實現IEnumerable<T>
。
它不允許我具有不同的返回類型,唯一允許的類型是IEnumerator(來自接口)。
這對於接口實現是不可避免的,但是顯式接口實現允許您使用單獨的公共方法。
只需創建兩個方法,一個返回MyIterator<T>
的public
方法,以及一個返回IEnumerator<T>
的顯式接口實現。
public abstract class BaseClass<T> : IBaseClass<T>
{
public MyIterator<T> Search(T e)
{
//Do something here
}
IEnumerator<T> IBaseClass<T>.Search(T e)
{
return Search(e);
}
}
這將導致類型為MyEnumerator<T>
用於調用BaseClass<T>.Search
和IEnumerator<T>
用於調用IBaseClass<T>.Search
(由接口要求)。 當然,請注意,無論哪種情況,實際值都將是MyEnumerator<T>
類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.