6

抱歉,如果标题措辞不当。假设我有一个光线追踪器,我希望能够使用浮点数或双精度数。我怎样才能声明一个选择浮点数或双精度类的新实例?我不想创建两个类并调用一个双类和另一个单类。

4

2 回答 2

7

在 .NET 中没有一种干净的方法来处理这个问题。泛型不直接支持算术运算。您可以通过诸如MiscUtils之类的变通方法或通过创建单独的计算器类并将数学委托给它来解决此问题,但这通常会使代码比拥有两个实现更复杂。

您可以dynamic在内部使用这里,这也可以。但是,这会增加(轻微的)开销,这可能会降低它的有用性。如果性能是您不想只支持双精度数学的主要原因,那么使用动态可能不是一种选择。

一种选择是使用T4创建一个模板,该模板从单个源文件构建代码的两个版本。这将为您提供完整的本机支持而无需开销(本质上只是为您编写两个类)。

于 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 回答