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
方法