publicclassVector<T> whereT : struct, IComparable<T> { public T X { get; set; } public T Y { get; set; }
publicVector(T x, T y) { X = x; Y = y; }
publicstaticVector<T> operator +(Vector<T> a, Vector<T> b) { returnnew Vector<T>(a.X + b.X, a.Y + b.Y); }
publicstaticbooloperator >(Vector<T> a, Vector<T> b) { return a.X.CompareTo(b.X) > 0 && a.Y.CompareTo(b.Y) > 0; }
publicstaticbooloperator <(Vector<T> a, Vector<T> b) { return a.X.CompareTo(b.X) < 0 && a.Y.CompareTo(b.Y) < 0; } }
在上面的例子中,我們定義了一個泛型類 Vector,它包含了兩個泛型類型的成員變量 X 和 Y,同時定義了加法運算符和比較運算符。在定義加法運算符時,我們使用了泛型類約束 where T : struct, IComparable,表示傳入的泛型類型必須是值類型,並且實現了 IComparable 接口。這樣一來,就可以保證在進行加法運算時,泛型類型可以進行數值相加的操作。在定義比較運算符時,我們使用了泛型類約束 where T : struct, IComparable,表示傳入的泛型類型必須是值類型,並且實現了 IComparable 接口,這樣一來,就可以保證泛型類型可以進行大小比較的操作。