扩展或静态功能?

时间:2011-12-14 13:34:43

标签: c# function static

我正在开发一个中等规模的项目,其中表演非常重要。我找不到(实际上无法理解)静态和扩展函数之间的区别。

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;
    } 
}

这些函数仅用于在其实例上调用扩展函数:

  1. Vector2 calc = myVector.MyTransform(0.45f);
  2. Vector2 calc = My.MyTransform(myVector,0.45f)
  3. 您更喜欢使用哪一种,或者更喜欢使用哪种?为什么?

    谢谢!

4 个答案:

答案 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关键字)时才能进行前一次调用,但在这两种情况下都可以使用后者。