我得到了一些代碼的一個問題:C#泛型約束:接口
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
實現隱?
我得到這樣一個事實,即它可能會導致問題,當類<T>
中的類Point
被定義爲未實現該接口時。但在這種情況下,爲什麼不可能?