Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展还是静态函数?_C#_Function_Static - Fatal编程技术网

C# 扩展还是静态函数?

C# 扩展还是静态函数?,c#,function,static,C#,Function,Static,我正在开发一个中型项目,在这个项目中,表演非常重要。我找不到(实际上无法理解)静态函数和扩展函数之间的区别 e、 g: 这些函数的使用方式相同,仅在其实例上调用扩展函数: Vector2 calc=myVector.MyTransform(0.45f) Vector2 calc=My.MyTransform(myVector,0.45f) 您更喜欢使用哪一种,或者更喜欢使用哪一种?为什么 谢谢 扩展方法是静态方法。它们只是语法上的糖。编译器将创建对静态方法的正常调用。这意味着,它们是等价的 性能

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

e、 g:

这些函数的使用方式相同,仅在其实例上调用扩展函数:

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


    谢谢

    扩展方法是静态方法。它们只是语法上的糖。编译器将创建对静态方法的正常调用。这意味着,它们是等价的

    性能上不会有任何差异-调用的扩展方法

    var result = foo.MyTransform(rotation);
    
    将由编译器简单地转换为:

    var result = My.MyTransform(foo, rotation);
    
    这并不是说扩展方法应该在任何地方都使用——但看起来这是一个合适的用例,除非您可以将其作为旋转的实例方法:

    var result = rotation.Apply(foo);
    

    (顺便说一句,我强烈建议您重新考虑自己的名字,以便遵循.NET命名约定。)

    这两个函数的实现方式完全相同。然而,从逻辑上讲,扩展方法允许您使用,因此它不仅仅是一种“语法糖”。

    它们被称为“扩展方法”,而不是扩展

    扩展方法只是让它看起来像是对象定义的一部分的一种方便方式

    如果你写:

    public static void DoSomething(this MyObject myObject) { }
    
    这意味着您可以这样从
    MyObject
    的实例调用它:

    myObject.DoSomething();
    
    如果在方法定义中省略
    this
    关键字,则不能这样调用它,只能这样调用:

    DoSomething(myObject);
    

    请注意,前一个调用只有在将方法作为扩展方法编写时才可能(使用
    this
    关键字),而后一个调用在这两种情况下都是可能的。

    如果编写此函数,为什么不在
    Vector2
    中而不是在
    My
    中编写
    MyTransform()
    ?函数没有区别。这只是个人对函数调用方式的偏好。扩展函数可以双向调用,而常规静态函数只能单向调用。如果此方法需要Vector2的实例,为什么它是静态的呢?
    static
    DoSomething(myObject);