繁体   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