扩展或静态函数
本文关键字:静态函数 扩展 | 更新日期: 2023-09-27 18:17:44
我正在开发一个中等规模的项目,其中性能非常重要。我找不到(实际上是无法理解)静态函数和扩展函数的区别。
例句:
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;
}
}
这些函数使用相同,只有扩展函数在其实例上被调用:
- Vector2 calc = myVector.MyTransform(0.45f);
- Vector2 calc = My。MyTransform (myVector 0.45 f)
你更喜欢用哪个,或者更喜欢用哪个,为什么?
谢谢!
将有没有性能差异-调用
的扩展方法var result = foo.MyTransform(rotation);
将被编译器简单地转换为:
var result = My.MyTransform(foo, rotation);
这并不是说扩展方法应该在的任何地方使用,但看起来这是一个合适的用例,除非你可以实际上使它成为Rotation上的实例方法:
var result = rotation.Apply(foo);
(作为题外话,我强烈建议您重新考虑您的名字,以遵循。net命名约定。)
扩展方法是静态方法。它们只是语法糖。编译器将创建一个对静态方法的普通调用。这意味着,它们是等价的。
这两个函数的实现方式完全相同。然而,从逻辑上讲,扩展方法允许您跨多个接口提供公共功能,因此它不仅仅是一个"语法糖"。
它们被称为"扩展方法",不被扩展。
扩展方法只是一种方便的方式,使它看起来像是对象定义的一部分。
如果你写:
public static void DoSomething(this MyObject myObject) { }
这意味着您可以从MyObject
的实例中像这样调用它:
myObject.DoSomething();
如果在方法定义中省略this
关键字,则不能像那样调用它,而只能像这样调用它:
DoSomething(myObject);
请注意,前一种调用只有在将方法写成扩展方法(使用this
关键字)时才有可能,而后一种调用在两种情况下都是可能的。