首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在C#中重载+ =运算符?但我仍然可以使用它?

这个问题涉及到C#编程语言中的运算符重载。在C#中,某些运算符允许重载,这意味着你可以自定义它们的行为。然而,对于某些运算符,如+=,它们的重载是受限制的。这是因为C#编程语言规范规定了哪些运算符可以被重载,以及它们的使用限制。

在C#中,可以重载的运算符有以下几种:

  1. 一元运算符:+、-、!、~、++、--、true、false
  2. 二元运算符:+、-、*、/、%、&、|、^、<<、>>、==、!=、>、<、>=、<=
  3. 转换运算符:()、explicit、implicit
  4. 其他运算符:[]、()、.、?、??、=>

在这些可以重载的运算符中,+=运算符是不能被重载的。这是因为C#编程语言规范规定了哪些运算符可以被重载,以及它们的使用限制。

尽管如此,你仍然可以在C#中使用+=运算符,但它的行为是由编译器预定义的。在大多数情况下,+=运算符用于将两个相同类型的值相加,并将结果赋值给左侧操作数。例如,对于整数、浮点数和字符串,+=运算符的行为是预定义的。

如果你想要自定义+=运算符的行为,你可以考虑使用其他运算符,如+运算符,并在自定义类型中重载它。这样,你可以通过重载+运算符来实现+=运算符的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# 那些可以重载运算符(操作符),以及使用它们的那些丧心病狂的语法糖

C# 那些可以重载运算符(操作符),以及使用它们的那些丧心病狂的语法糖 发布于 2018-05-19 23:20...更新于 2018-12-14 01:54 C# 运算符重载并不新鲜。...然而,到底有哪些运算符可以重载重载运算符可以用来做哪些丧心病狂的事情呢? 本文收集了 C# 中所有可以重载运算符,并且利用他们做了一些丧心病狂的语法糖。...---- 可以重载运算符 运算符重载比想象的更加强大。因为——重载运算符可以随意定义运算符操作数的数据类型和返回值的类型。 是的!不只是操作数,连返回值类型也能被重载!...: 通过重载 true 和 false 一元运算符可以达到目的。 ?? 可以阅读:C# 空合并运算符(??)不可重载?其实有黑科技可以间接重载! 不可被重载运算符 =, ., ?:, ??

1.2K40

10个最难回答的Java面试题

为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说 + 运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1) 简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,如静态分析等,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...其实本质就是开发难度太大,就像C#很早支持了运算符重载,async await异步编程模型和类中支持属性{get;set;},但是这在JVM平台很难实现,只能借助于第三方插件或者封装而不能在语言级别去支持他们

81620
  • 如何在 Swift 自定义操作符

    使用大多数语言(包括Swift)的操作符时,您有都有两个选项,重载现有运算符,或者创建一个新的运算符重载工作就像方法重载,您可以使用新的输入或输出创建新版本的操作符。...但是,您也希望数学的标准减法API变成:5.reduce(by: 3),所以也许这是一个运算符重载表现完美的地方。 布局计算 让我们来看看另一种方案,其中使用操作符重载可能非常好。...使这个有点更好的一种方法可以是定义另一个 + 重载,该 + 重载接受包含两个 CGFloat 值的元组,如下所示: extension CGSize { static func +(lhs: CGSize...通过使用操作符,我们已从我们的逻辑删除了大量的繁琐代码和语法,使我们的代码更为聚焦。然而,缺点是我们引入了一个新的错误处理语法,这可能是任何可能在未来加入我们项目的新开发人员完全不熟悉的。...就像以更高级的方式使用第一类函数时,认为在引入新的运算符或创建额外的重载前,需要三思而后行。从其他开发人员获得反馈也可以超级有价值,作为一种新的操作符,对您的感觉和对别人的感觉完全不一样。

    1.2K20

    译 | 你到底有多精通 C#

    如果这样做,可能会导致特定边缘情况下的未处理异常。虽然这样的错误偶尔会发生在每个人身上,但我们几乎不能称之为意外行为。 但是,下面的代码呢?...重载方法的 null 值 在转到其他话题之前,让我们仔细了解在调用参数数量相同但类型不同的重载方法时如何处理空值。...== Colors.Red; 在上面的代码在按位逻辑操作前后加上括号,以使代码更加清晰。...这意味着该值仍然为 0,这导致了DivideByZeroException。 在我们的示例可以通过直接初始化除数字段而不是在构造函数来解决此问题。...然而,该示例说明了为什么从构造函数调用虚拟方法可能很危险。当调用它们时,它们在定义的类的构造函数可能尚未调用,因此它们可能会出现意外行为。 多态性 多态性是不同类以不同的方式实现相同接口的能力。

    84140

    在 Swift 自定义操作符

    使用大多数语言(包括Swift)的操作符时,您有都有两个选项,重载现有运算符,或者创建一个新的运算符重载工作就像方法重载,您可以使用新的输入或输出创建新版本的操作符。...但是,您也希望数学的标准减法API变成:5.reduce(by: 3),所以也许这是一个运算符重载表现完美的地方。 布局计算 让我们来看看另一种方案,其中使用操作符重载可能非常好。...使这个有点更好的一种方法可以是定义另一个+重载,该+重载接受包含两个CGFloat值的元组,如下所示: extension CGSize { static func +(lhs: CGSize,...通过使用操作符,我们已从我们的逻辑删除了大量的繁琐代码和语法,使我们的代码更为聚焦。然而,缺点是我们引入了一个新的错误处理语法,这可能是任何可能在未来加入我们项目的新开发人员完全不熟悉的。...就像以更高级的方式使用第一类函数时,认为在引入新的运算符或创建额外的重载前,需要三思而后行。从其他开发人员获得反馈也可以超级有价值,作为一种新的操作符,对您的感觉和对别人的感觉完全不一样。

    1.5K40

    90%的Java程序员不会的10道Java面试题

    1.为什么等待和通知是在 Object 类而不是 Thread 声明的? 2.为什么Java不支持多重继承? 3.为什么Java不支持运算符重载?...为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。

    1K00

    超硬核!苏州同程旅游学长给我的全面的面试知识库

    为了使对象可序列化,它应该实现ISerialize接口。反序列化是从字节流创建对象的反向过程。 12、我们可以在静态方法中使用“ this”命令吗?...我们可以轻松地将自定义控件添加到多个应用程序(如果共享的Dll)。因此,如果它们是私有的,那么我们可以将其复制到dll到Web应用程序的bin目录,然后添加引用并可以使用它们。...冒号在C#中用作继承运算符。只需放置一个冒号,然后放置类名。 公共类DerivedClass:BaseClass 35、.net的基类是什么,所有类都源自该基类?...System.Object 36、方法重载和方法重载之间有什么区别? 在方法重写,我们在派生类更改了方法定义,从而改变了方法的行为。方法重载是在同一个类创建具有不同签名的同名方法。...37、重载方法有哪些不同的方式? 可以使用参数的不同数据类型,参数的不同顺序和参数的数量来重载方法。 38、为什么不能为接口内的方法指定可访问性修饰符? 在接口中,我们有没有方法定义的虚拟方法。

    3K20

    挑战10个最难回答的Java面试题(附答案)

    (实用详尽的Java面试题大全,可以在Java知音公众号回复“面试题聚合”) 3.为什么Java不支持运算符重载? 另一个类似棘手的Java问题。为什么 C++ 支持运算符重载而 Java 不支持?...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。 清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    1.4K40

    挑战 10 道超难 Java 面试题

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    73120

    Java 大牛看过来,挑战10道超难 Java 面试题!

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    72731

    史上最难10道 Java 面试题!

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    84330

    10 大 Java面试难题,打趴无数面试者!

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。 4....,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    1.8K21

    挑战 10 道超难 Java 面试题

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    75010

    听说这10道Java面试题90%的人都不会!!!

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    64120

    来一场Java高级的面试,看看自己啥水准

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。 4....,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    1K10

    挑战 10 道超难 Java 面试题

    为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 已被重载用于字符串连接,不要被这些论据所欺骗。 与 C++ 不同,Java 不支持运算符重载。...虽然不知道背后的真正原因,但我认为以下说法有些道理,为什么 Java 不支持运算符重载。 1)简单性和清晰性。清晰性是Java设计者的目标之一。...从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 运算符重载是有意义的。...这是在 Java 不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 的重构工具远胜于 C++。...,你不能在Java覆盖静态方法,但在子类声明一个完全相同的方法不是编译时错误,这称为隐藏在Java的方法。

    69520

    C#: 不同的方式检查Null

    结合空合并运算符(??),可以这样编写空检查: _ = name ??...认为is关键字非常清晰易读。它是的最爱。 is关键字还有一个很大的优点,就是它忽略了任何==/!=运算符或者重载特定类。不管是否有操作符重载,它都将执行null检查。这比仅仅使用==更好。...你可以在这篇博文[1]中了解更多。 C# 9.0的Is关键字和Not模式 在C# 9.0,如果您想检查对象不为null,那么将is表达式与逻辑not模式结合起来这是非常强大的。...这就是为什么许多开发人员仍然喜欢经典的方式: if (name !...= null) { } 但从C# 9.0开始,您可以编写如下的非空检查,认为这是真正可读的代码: if (name is not null) { } 总结 So, with C# 9.0, you

    50110

    C#: 不同的方式检查Null

    结合空合并运算符(??),可以这样编写空检查: _ = name ??...认为is关键字非常清晰易读。它是的最爱。 is关键字还有一个很大的优点,就是它忽略了任何==/!=运算符或者重载特定类。不管是否有操作符重载,它都将执行null检查。这比仅仅使用==更好。...你可以在这篇博文[1]中了解更多。 C# 9.0的Is关键字和Not模式 在C# 9.0,如果您想检查对象不为null,那么将is表达式与逻辑not模式结合起来这是非常强大的。...这就是为什么许多开发人员仍然喜欢经典的方式: if (name !...= null) { } 但从C# 9.0开始,您可以编写如下的非空检查,认为这是真正可读的代码: if (name is not null) { } 总结 So, with C# 9.0, you

    42520

    C# 这些年来受欢迎的特性

    接口在现今开发 C# 的过程仍然流行使用,以下面的 IDateProvider 接口为例。...但是,联系目前的 C# 编程,相对于任何其他的 C# 运算符更多地使用 lambda 操作符 。无法表达对它的喜爱。 在C#中有很多机会来利用 lambda 表达式和 lambda 运算符。...就想问,谁没有写过重载或者带有可选参数的方法? 当您编写可选参数时,您必须为其提供一个默认值。如果你的参数是一个值类型,那么它必须是一个文字或者常数值,或者你可以使用 default 关键字。...模式匹配是伟大的,但我真的不觉得自己经常使用它,至少现在还没有。也许我会在将来更多地使用它,但是到目前为止所写的所有 C# 代码,没有太多的地方可以运用。...它在声明内联回 if 语句块之前。 你可能会问:“为什么这是最喜欢的功能之一?”......这种看起来真的没有什么变化。 不要怀疑,它使我们的 C# 代码更具有表现力。

    19620

    精:C#这些年来受欢迎的特性

    接口在现今开发 C# 的过程仍然流行使用,以下面的 IDateProvider 接口为例。...但是,联系目前的 C# 编程,相对于任何其他的 C# 运算符更多地使用 lambda 操作符 。无法表达对它的喜爱。 在C#中有很多机会来利用 lambda 表达式和 lambda 运算符。...就想问,谁没有写过重载或者带有可选参数的方法? 当您编写可选参数时,您必须为其提供一个默认值。如果你的参数是一个值类型,那么它必须是一个文字或者常数值,或者你可以使用 default 关键字。...模式匹配是伟大的,但我真的不觉得自己经常使用它,至少现在还没有。也许我会在将来更多地使用它,但是到目前为止所写的所有 C# 代码,没有太多的地方可以运用。...它在声明内联回 if 语句块之前。 你可能会问:“为什么这是最喜欢的功能之一?”......这种看起来真的没有什么变化。 不要怀疑,它使我们的 C# 代码更具有表现力。

    16930
    领券