接口中的类型#
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>
(来自界面)。我知道它有点连线,但这是它在给定的上下文。例如,其他 class 如:
public class SpecializedContainer<T> : BaseClass<T>
将使用 BaseClass)
您缺少一个类型参数,您对 IBaseClass
的定义应该有一个类型参数 T
(除非它们是另一个 class 的一部分)。
您确定 IBaseClass
实现了 IEnumerator<T>
吗?通常它会实现 IEnumerable<T>
.
It doesn't allow me to have a different returned type, the only one allowed is IEnumerator(from the interface).
这对于接口实现来说是不可避免的,但是显式接口实现允许您有一个单独的 public 方法。
只需创建两个方法,一个 public
一个 returns MyIterator<T>
和一个 returns 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);
}
}
这将导致调用 BaseClass<T>.Search
的类型为 MyEnumerator<T>
,调用 IBaseClass<T>.Search
的类型为 IEnumerator<T>
(根据界面要求)。当然请注意,无论哪种情况,实际值都是 MyEnumerator<T>
.
类型
在 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>
(来自界面)。我知道它有点连线,但这是它在给定的上下文。例如,其他 class 如:
public class SpecializedContainer<T> : BaseClass<T>
将使用 BaseClass)
您缺少一个类型参数,您对 IBaseClass
的定义应该有一个类型参数 T
(除非它们是另一个 class 的一部分)。
您确定 IBaseClass
实现了 IEnumerator<T>
吗?通常它会实现 IEnumerable<T>
.
It doesn't allow me to have a different returned type, the only one allowed is IEnumerator(from the interface).
这对于接口实现来说是不可避免的,但是显式接口实现允许您有一个单独的 public 方法。
只需创建两个方法,一个 public
一个 returns MyIterator<T>
和一个 returns 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);
}
}
这将导致调用 BaseClass<T>.Search
的类型为 MyEnumerator<T>
,调用 IBaseClass<T>.Search
的类型为 IEnumerator<T>
(根据界面要求)。当然请注意,无论哪种情况,实际值都是 MyEnumerator<T>
.