[英]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.