C# 在泛型中实现接口时,为什么不使用它必须实现方法

C# 在泛型中实现接口时,为什么不使用它必须实现方法,c#,generics,C#,Generics,在泛型中实现接口时,为什么不使用它必须实现方法 public interface IMyTest<T> { T Add(T i, T j); } public class MyContainer<T> where T : IComparable<T>, IMyTest<T> { } 公共接口IMyTest { T加(ti,tj); } 公共类MyContainer,其中T:IComparable,IMyTest { } 您没有实现接

在泛型中实现接口时,为什么不使用它必须实现方法

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

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

}
公共接口IMyTest
{
T加(ti,tj);
}
公共类MyContainer,其中T:IComparable,IMyTest
{
}

您没有实现接口。您的意思是,为类型参数
T
提供的类型参数本身必须实现接口。这就是
中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());
    }
}
公共类MyContainer,其中T:i可比较,IMyTest
{
公共消费最大和最小(IEnumerable items)
{
var ordered=items.OrderBy(x=>x)
.ToList();
返回ordered.First().Add(ordered.First(),ordered.Last());
}
}
(不清楚为什么您的
Add
方法需要两个
T
值,以及作为实例方法,但这是另一回事。)


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

您没有实现接口。您的意思是,为类型参数
T
提供的类型参数本身必须实现接口。这就是
中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());
    }
}
公共类MyContainer,其中T:i可比较,IMyTest
{
公共消费最大和最小(IEnumerable items)
{
var ordered=items.OrderBy(x=>x)
.ToList();
返回ordered.First().Add(ordered.First(),ordered.Last());
}
}
(不清楚为什么您的
Add
方法需要两个
T
值,以及作为实例方法,但这是另一回事。)

如果没有
T
上的约束,就不会有要调用的
Add
方法