簡體   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