C# 扩展还是静态函数?
我正在开发一个中型项目,在这个项目中,表演非常重要。我找不到(实际上无法理解)静态函数和扩展函数之间的区别 e、 g: 这些函数的使用方式相同,仅在其实例上调用扩展函数:C# 扩展还是静态函数?,c#,function,static,C#,Function,Static,我正在开发一个中型项目,在这个项目中,表演非常重要。我找不到(实际上无法理解)静态函数和扩展函数之间的区别 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);