扩展或静态函数

本文关键字:静态函数 扩展 | 更新日期: 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;
    } 
}

这些函数使用相同,只有扩展函数在其实例上被调用:

  1. Vector2 calc = myVector.MyTransform(0.45f);
  2. 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关键字)时才有可能,而后一种调用在两种情况下都是可能的。