【发布时间】:2018-06-29 20:03:48
【问题描述】:
我最近得到了 Joseph 和 Ben Albahari 的 C# 7.0 in a Nutshell 副本。当我浏览有关高级 C# 的章节时,第 199 页特别是它开始介绍运算符重载的地方;我开始想,有没有关于运算符重载的官方消息,类似于至少原始类型的扩展方法?例如:
// Traditional Overload
public static MyType operator +(MyType, MyType);
// Traditional Extension Method
public static int Sum(this int, int[]);
// Possible Combination?
public static int operator +(this int, int, string);
在上面的例子中,有加法运算符的传统重载;这允许我执行自定义添加我的类型的属性以提供新值。然后是传统的扩展方法,我们可以通过添加我们认为有用的方法来扩展类型;与上面的示例类似,如果我经常将整数数组中的所有值相加以获得它们的总和,那么我可以创建一个有用的扩展方法来实现:
int sum = int.Sum(myArrayOfIntegers);
综上所述,扩展运算符重载可能很有用,至少对于原语来说是这样。例如:
public static int operator +(this int i, int x, string y) {
// Perform parsing of the string and return the newly added value between x and y.
}
然后,我可以对多种有用的原始类型执行算术运算,而不必不断尝试解析代码中的数据。解析数据并不难,但是当你必须做数百次相同的事情(包括调用一个方法来执行解析和算术)时,如果有的话,它可能会变得乏味。
自从this post 于 2008 年得到答复后,我进行了一些搜索,但找不到与此主题相关的任何内容。十年是很长的时间,我希望从那时起,该帖子的观点有所改变。
很遗憾地报告,我们不会在下一个版本中这样做。在我们的计划中,我们确实非常重视扩展成员,并花了很多精力试图让它们正确,但最终我们无法做到足够顺利,并决定让位于其他有趣的功能。
我们仍在关注未来的版本。如果我们获得大量可以帮助推动正确设计的引人入胜的场景,这将有所帮助。
在我看来,仍然在我们的雷达上并不是很有希望。
请仅在资源可靠且最新(或在过去 2 年内)时提供答案。
【问题讨论】:
-
在一个例子中你会如何称呼那个操作符?无论如何:为什么在这里问这个而不是微软支持?我们怎么知道微软对此有什么计划?
-
语言存储库有许多与此相关的问题以及属于“扩展一切”标题下的类似功能(例如扩展属性)。最近的问题之一是here。
标签: c# operator-overloading extension-methods