【发布时间】:2014-07-02 11:18:43
【问题描述】:
我对一些代码有疑问:
interface IDistance<T>
{
double distance();
double distance(T obj);
}
class Point<T> where T : IDistance<T> //why do i need this?
{
T obj;
public double dist(T val) { return obj.distance(val);
public Point(T obj) { this.obj = obj; }
}
class P2D : IDistance<P2D>
{
public double[] x = new double[2];
public P2D(double x, double y)
{
this.x[0] = x; this.x[1] = y;
}
public double distance()
{
double d = 0.0;
for (int i = 0; i < 2; i++) d = d + x[i] * x[i];
return Math.Sqrt(d);
}
public double distance(P2D val)
{
double d = 0.0;
for (int i = 0; i < 2; i++) d = d + Math.Pow(x[i]-val.x[i],2);
return Math.Sqrt(d);
}
}
class Tester
{
static void Main(string[] args)
{
P2D P1 = new P2D(3.0, 4.0);
Point<P2D> C1 = new Point<P2D>(P1);
Console.WriteLine(C1.dist());
}
}
详细的代码并不重要。
为什么在泛型类Point<T> 中需要约束where T : IDistance<T>?
当我只指定已经实现接口IDistance<T> 的类时
P2D类,不应该是Point类中已经隐式实现的接口吗?
我知道它可能会导致问题,当在类Point 中定义一个类型为<T> 的类时,它还没有实现接口。但是在这种情况下,为什么不可能呢?
【问题讨论】:
标签: c# generics interface where