6

タイトルの表現が不適切でしたら申し訳ありません。レイ トレーサーがあり、float または double のいずれかを使用できるようにしたいとします。float または double のいずれかを選択してクラスの新しいインスタンスを宣言できるようにするにはどうすればよいですか? 2 つのクラスを作成して、1 つを double、もう 1 つを single と呼びたくありません。

4

2 に答える 2

7

.NET でこれを処理するクリーンな方法はありません。ジェネリックは、算術演算を直接サポートしていません。これは、 MiscUtilsなどの回避策を使用するか、別の電卓クラスを作成して数学を委譲することで解決できますが、多くの場合、2 つの実装よりもコードが複雑になります。

dynamicここを内部的に使用することもできますが、これも同様に機能します。ただし、これにより (わずかな) オーバーヘッドが追加され、これの有用性が低下する可能性があります。倍精度演算のみをサポートしたくない主な理由がパフォーマンスである場合、動的を使用することはおそらく選択肢ではありません。

1 つのオプションは、T4を使用して、1 つのソース ファイルから両方のバージョンのコードをビルドするテンプレートを作成することです。これにより、オーバーヘッドなしで完全なネイティブ サポートが提供されます (基本的には、2 つのクラスを作成するだけです)。

于 2012-12-12T23:48:20.283 に答える
0

これには C# ジェネリックを使用できます。

using System;

class Test<T>
{
    T _value;

    public Test(T t)
    {
    // The field has the same type as the parameter.
    this._value = t;
    }

    public void Write()
    {
    Console.WriteLine(this._value);
    }
}

class Program
{
    static void Main()
    {
    // Use the generic type Test with an int type parameter.
    Test<int> test1 = new Test<int>(5);
    // Call the Write method.
    test1.Write();

    // Use the generic type Test with a string type parameter.
    Test<string> test2 = new Test<string>("cat");
    test2.Write();
    }
}

このブログでは、もう少し詳しく説明していますhttp://www.dotnetperls.com/generic

于 2012-12-12T23:40:42.587 に答える