在Generic中实现接口时,为什么不必实现这些方法

时间:2016-05-26 11:17:22

标签: c# generics

在Generic中实现接口时,为什么不必实现方法

public interface IMyTest<T>
{
    T Add(T i, T j);
}

public class MyContainer<T> where T : IComparable<T>, IMyTest<T> 
{

}

1 个答案:

答案 0 :(得分:14)

您没有实现该界面。您说为类型参数T提供的类型参数必须本身实现该接口。这就是where T部分的含义 - 它在T上指定约束

这意味着在您的MyContainer课程中,您可以使用界面的成员:

public class MyContainer<T> where T : IComparable<T>, IMyTest<T> 
{
    public T SumBiggestAndSmallest(IEnumerable<T> items)
    {
        var ordered = items.OrderBy(x => x)
                           .ToList();
        return ordered.First().Add(ordered.First(), ordered.Last());
    }
}

(目前还不清楚为什么Add方法采用两个T值,以及作为实例方法,但这是另一回事。)

如果没有T的约束,您就不会有Add方法来调用。