gpt4 book ai didi

java - C# 接口(interface)中的类型

转载 作者:行者123 更新时间:2023-12-01 11:36:18 24 4
gpt4 key购买 nike

在 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>

将使用基类)

最佳答案

您缺少类型参数,即 IBaseClass 的定义应该有一个类型参数 T (除非它们属于另一个类)。

你确定吗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).

这对于接口(interface)实现来说是不可避免的,但是显式接口(interface)实现允许您拥有单独的公共(public)方法。

只需创建两个方法,一个 public返回 MyIterator<T> 的一个以及返回 IEnumerator<T> 的显式接口(interface)实现.

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>.SearchIEnumerator<T>调用IBaseClass<T>.Search (根据接口(interface)要求)。当然请注意,在任何一种情况下,实际值的类型都是 MyEnumerator<T> .

关于java - C# 接口(interface)中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29954616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com