使用C#扩展方法重载运算符
我试图使用扩展方法将操作员重载添加到C#StringBuilder
类。具体来说,StringBuilder
sb
我想sb +=
"text"等同于sb.Append("text")
。
这是为创建扩展方法的语法StringBuilder
:
public static class sbExtensions{
public static StringBuilder blah(this StringBuilder sb)
{
return sb;
}
}
成功将blah
扩展方法添加到中StringBuilder
。
不幸的是,操作符重载似乎不起作用:
public static class sbExtensions{
public static StringBuilder operator +(this StringBuilder sb, string s)
{
return sb.Append(s);
}
}
除其他问题外,this
此上下文中不允许使用关键字。
通过扩展方法可以添加运算符重载吗?如果是这样,解决该问题的正确方法是什么?
回答:
目前这是不可能的,因为扩展方法必须在静态类中,并且静态类不能有运算符重载。
C#语言PM的Mads Torgersen说:
…对于Orcas版本,我们决定采用谨慎的方法,仅添加常规扩展方法,而不是扩展属性,事件,运算符,静态方法等。常规扩展方法是LINQ所需要的,它们具有一种语法上最小的设计,对于其他某些成员来说,这是不容易模仿的。
我们越来越意识到其他类型的扩展成员也可能有用,因此我们将在Orcas之后再讨论这个问题。但是,没有任何保证!
编辑:
我刚刚注意到,Mads在同一篇文章中写道:
遗憾的是,我们将在下一个版本中不再这样做。我们确实在计划中非常重视扩展成员,并花了很多努力来使他们正确,但是最终我们无法使其顺畅,因此决定让位给其他有趣的功能。
对于将来的版本,这仍然是我们的注意事项。如果我们能获得大量引人入胜的方案来帮助进行正确的设计,那将会有所帮助。
当前(可能)在C#8.0上具有此功能。Mads
在这里讨论了更多有关实现它的内容。
以上是 使用C#扩展方法重载运算符 的全部内容, 来源链接: utcz.com/qa/422044.html