簡體   English   中英

一種實現通用和非通用接口的函數

[英]One function implementing Generic and non-generic interface

可以說我有一個類,該類實現了通用接口IItem {}

public interface IStuff<out TItem> where TItem : IItem
{
    TItem FavoriteItem { get; }
}

public class MyStuff<TItem> : IStuff<TItem> where TItem : IItem
{
    public TItem FavoriteItem
    {
        get { throw new NotImplementedException(); }
    }
}

我也有一個非通用接口

public interface IFavoriteItem
{
    IItem FavoriteItem { get; }
}

我想讓MyStuff類實現此IFavoriteItem接口。 由於TItem實現了IItem,在我看來, public TItem FavoriteItem屬性已經實現了IFavoriteItem。

但是編譯器不這么認為,它希望我在MyClass中聲明一個單獨的IItem IFavoriteItem.FavoriteItem 為什么會這樣呢? C#協方差不是應該在這里解決我的問題的東西嗎?

謝謝

這樣做的原因是, FavoriteItemIFavoriteItem可能不是 IItem ,其中在IFavoriteItem ,它必須是一個IItem 解決此問題的唯一方法是:

IItem IFavoriteItem.FavoriteItem
{
    get { return FavoriteItem; }
}

這將簡單地將對TItem實現的調用快捷方式化。

IEnumerable<>的實現是一個經常使用此方法的好例子。 這些通常看起來像這樣:

public class MyEnumerable : IEnumerable<T>
{
    public IEnumerator<T> GetEnumerator()
    {
        throw new NotImplementedException();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM