在不失可讀性的巨大成本,就可以使用
interface IEq<T>
{
bool Equals(T a, T b);
}
interface IOrd<T> : IEq<T>
{
int Compare(T a, T b);
}
interface IShow<T>
{
string Show(T a);
}
interface INum<T> : IEq<T>, IShow<T>
{
T Add(T a, T b);
T Subtract(T a, T b);
T Multiply(T a, T b);
T Negate(T a);
T Abs(T a);
T Signum(T a);
T FromInteger(int x);
}
interface IReal<T> : INum<T>, IOrd<T>
{
}
與任意數量的類型實現重寫所有的方法從
int Factorial(int x)
{
if (x == 0) return 1;
return x * Factorial(x - 1);
}
到
T Factorial<T>(IReal<T> t, T x)
{
if (t.Equals(x, t.FromInteger(0))) return t.FromInteger(1);
return t.Multiply(x, Factorial<T>(t, t.Subtract(x, t.FromInteger(1))));
}
。
來源
2011-07-06 13:38:01
dtb
它不存在。 .net IMO最大的缺陷之一。你可以使用'MiscUtil'的操作符類,但速度很慢。一些C#數字項目使用代碼生成器爲常見數字類型創建其代碼的版本。 [[Jeff Avatar Image]] – CodesInChaos