繁体   English   中英

接口C#中的类型

[英]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>.SearchIEnumerator<T>用于调用IBaseClass<T>.Search (由接口要求)。 当然,请注意,无论哪种情况,实际值都将是MyEnumerator<T>类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM