Joh*_*zen 3 .net c# math extension-methods language-features
如果我有一个计算两个整数的最大公约数的方法:
public static int GCD(int a, int b)
{
return b == 0 ? a : GCD(b, a % b);
}
Run Code Online (Sandbox Code Playgroud)
将它附加到System.Math类的最佳方法是什么?
以下是我提出的三种方式:
public static int GCD(this int a, int b)
{
return b == 0 ? a : b.GCD(a % b);
}
// Lame...
var gcd = a.GCD(b);
Run Code Online (Sandbox Code Playgroud)
和:
public static class RationalMath
{
public static int GCD(int a, int b)
{
return b == 0 ? a : GCD(b, a % b);
}
}
// Lame...
var gcd = RationalMath.GCD(a, b);
Run Code Online (Sandbox Code Playgroud)
和:
public static int GCD(this Type math, int a, int b)
{
return b == 0 ? a : typeof(Math).GCD(b, a % b);
}
// Neat?
var gcd = typeof(Math).GCD(a, b);
Run Code Online (Sandbox Code Playgroud)
所需的语法是Math.GCD因为它是所有数学函数的标准.
有什么建议?我该怎么做才能获得所需的语法?
Ada*_*son 11
你不能.扩展方法只是用于调用静态函数和传递特定类型实例的语法糖.鉴于此,它们仅在实例上运行,因为它们必须通过传递this要附加的类型的参数来定义.