我正在开发一个中等规模的项目,其中表演非常重要。我找不到(实际上无法理解)静态和扩展函数之间的区别。
e.g:
public static class My
{
public static Vector2 MyTransform(this Vector2 point, float Rotation)
{
//....
return MyVector;
}
public static Vector2 MyTransform(Vector2 point, float Rotation)
{
//....
return MyVector;
}
}
这些函数仅用于在其实例上调用扩展函数:
您更喜欢使用哪一种,或者更喜欢使用哪种?为什么?
谢谢!
答案 0 :(得分:9)
没有性能差异 - 调用
的扩展方法var result = foo.MyTransform(rotation);
将简单地由编译器转换为:
var result = My.MyTransform(foo, rotation);
现在不是说扩展方法应该在无处不在 - 但看起来这是一个合适的用例,除非你实际上使它成为一个实例方法在轮换:
var result = rotation.Apply(foo);
(另外,我强烈建议您重新考虑您的名字,以遵循.NET命名约定。)
答案 1 :(得分:5)
扩展方法 ARE 静态方法。它们只是语法糖。编译器将创建对静态方法的正常调用。这意味着,它们是等价的。
答案 2 :(得分:3)
这两个功能以完全相同的方式实现。然而,从逻辑上讲,扩展方法允许你provide common functionality across multiple interfaces,所以它不仅仅是一个“语法糖”。
答案 3 :(得分:2)
它们被称为“扩展方法”而不是扩展。
扩展方法只是让它看起来像是对象定义的一部分的便捷方式。
如果你写:
public static void DoSomething(this MyObject myObject) { }
这意味着您可以从MyObject
的实例中这样调用它:
myObject.DoSomething();
如果在方法定义中省略this
关键字,则无法像这样调用它,但只能这样:
DoSomething(myObject);
请注意,虽然只有在将方法编写为扩展方法(使用this
关键字)时才能进行前一次调用,但在这两种情况下都可以使用后者。