2

ねえ、

私は探していましたが、適切な答えが見つかりませんでした...多分私を指摘してください。

だから私はインターフェースとポイントクラスを持っています:

interface IDoable<T>{
    void DoSomething<T>(T ) ;
}
class Point<T>:IDoable <T>{ 
    public T x;
    public T y;
    public Point(T x, T y){

        this.x = x;
        this.y = y;
    }
    public void DoSomething<T>(Point<T> p){
        p.x += 10;
        p.y += 10;
    }
}

しかし、intはTに変換できないため、それはできないと言われています。

int、float、double、またはその他のいずれかのタイプの Point を取り、値を変更できるインターフェイスが必要です。何か案は?

4

2 に答える 2

1

最初:
インターフェイスの定義が正しくありません。DoSomething独自のジェネリック パラメータを持つべきではありません。
次のようになります。

interface IDoable<T>
{
    void DoSomething(T p) ;
}

2 番目:
.NET には、ジェネリック クラスが特定の演算子を使用できるようにするインターフェイス、共通基本クラス、またはその他の可能性はありません。
つまり、使用する数値型ごとにクラスを作成する必要があります。
この実装のDoSomethingメソッドがasパラメータを取る必要がある場合*Point-質問に従って-の実装は次のintようになります。

class IntPoint : IDoable<IntPoint>
{ 
    public int x;
    public int y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public void DoSomething(IntPoint p)
    {
        p.x += 10;
        p.y += 10;
    }
}

DoublePointなどのクラスを作成する必要がありますdoubles

すべての派生クラスでオーバーライドする必要がある算術演算用の抽象メソッドを使用して抽象基本クラスを作成することにより、繰り返しコードの量を少し減らすことができます。

于 2013-09-04T09:44:08.257 に答える