【问题标题】:why C# not allow operator overloading?为什么 C# 不允许运算符重载?
【发布时间】:2010-03-01 05:32:06
【问题描述】:

为什么 C# 不允许运算符重载,而 C++ 允许?

我在尝试超载时遇到此错误。

需要可重载的二元运算符

我的示例代码看起来像,

public static MyClass operator +=(MyClass obj1, MyClass obj2)
        {
           ...
        }

【问题讨论】:

  • @User:我编辑了我的答案来解释为什么你的代码不起作用。

标签: c# .net operator-overloading


【解决方案1】:

您可以在 C# 中重载运算符:

在决定使用运算符重载之前,请至少阅读以下内容:


编辑以响应操作员的编辑:

+= 是不可重载的运算符。但是,它解析为+,并且+ 是可重载的。有一个 look here 可以和不能重载的运算符。

可重载的运算符:

+-!~++--truefalse

+, -, *, /, %, &, |, ^, <<, >>

==!=<><=>=(比较运算符可以重载,但请参阅链接中的注释)

【讨论】:

    【解决方案2】:

    运算符重载,C# 允许。 (尤达版)

    【讨论】:

      【解决方案3】:

      它确实允许运算符重载..

      也就是说,通常建议不要覆盖操作符,因为它会改变代码的语义,从而降低其他人的可维护性。

      【讨论】:

      • 除非重载的运算符为它们正在操作的对象提供适当的语义。复数类上“+”的经典示例是完全可以接受的运算符重载用法。
      • 加上诸如 Linq to XML 中的转换操作符使得读取元素值非常优雅。
      【解决方案4】:

      c# 确实允许运算符重载。 MSDN教程here.

      【讨论】:

        【解决方案5】:

        您可以在 C# 中重载运算符。 Operator Overloading Tutorial

        【讨论】:

          猜你喜欢
          • 2011-09-04
          • 2010-09-10
          • 2013-06-12
          • 1970-01-01
          • 2012-10-30
          • 2018-05-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多