2010-12-02 1 views
5

私は可変精度の様々な構造を作りたいと思っています。たとえば: - あなたはバイトベースポイント、または倍精度を必要に応じて(浮動小数点数のため、)(整数の)PointPointFしかし、数値を表す値の型によって共有されるインターフェイスはありますか?

public struct Point<T> where T : INumber 
{ 
    public T X; 
    public T Y; 

    public static Point<T> operator +(Point<T> p1, Point<T> p2) 
    { 
     return new Point<T> 
        { 
         X = p1.X+p2.X, 
         Y = p1.Y+p2.Y 
        }; 
    } 
} 

私は2つの構造体を作成することによって、これとマイクロソフトのお得な情報を知っています古いコードをたくさんコピーし、値の型を変更するだけで済みます。

+3

この質問を参照してください:http://stackoverflow.com/questions/4322383/why-dont-number-types-not-share-a-common-interface/4322432#4322432 –

+0

あなたはC# ...ニース! + rep'ing :) – Machinarius

答えて

2

あなたがそれを行うことができない理由単純な理由があります:演算子は、非仮想、すなわち、コンパイラはp1.X+p2.Xは整数加算またはダブル加えてあるかどうかをコンパイル時でを知っている必要がありますされています。

+0

コンパイラはコンパイル時にTが何であるかを知っていませんか?たぶんそれはインターフェイスのようには動作しないはずですが、C#の素敵な言語機能です - Tを数字にして+、 - 、*、および/を使用できるようにする機能。 – dlras2

+2

@Daniel:いいえ、コンパイル時にTの型がわからない...ライブラリを開発している可能性があるので、コンパイラはあなたの顧客があなたのクラスに渡すT *を知ることができません。 – Heinzi

+0

ライブラリーについての良い点 - 私はジェネリック薬が危険であると知っています。しかし、それはあまりにも悪いです。彼らはC#5.0のためのいくつかの解決策を検討する必要があります、これは本当に便利だからです。 – dlras2

0

いいえ、このようなインターフェイスはありません。

関連する問題