对于StringBuilder类,为什么不重载+ =运算符而不是使用唯一的.Append()方法?
Append()只连接字符串,为什么它们不仅仅像这样重载+ =运算符:
StringBuilder sb = new StringBuilder();
sb += "My string";
这是效率吗? 这是一个传统或直观的案例吗?
谢谢,
答案 0 :(得分:29)
算术运算应限于类似于算术值的类型。两个字符串的总和是第三个字符串是很糟糕的。将加法操作与字符串连接相关联是一个值得怀疑的选择,因为字符串连接遵循很少的加法规则;尤其是a + b != b + a
。
但是去那里寻找字符串构建器 - 根据定义可变状态而不是算术值 - 是可怕的即可。 两件事的总和应该是第三件事,它不同于两个加号。也就是说,a += b
必须与a = a + b
具有相同的语义而不是a.MutateWith(b)
。 如果最后没有a
的分配,那么复合赋值操作错误。
更一般地说:永远不会使运营商过载过载。操作员超载是存在的,这样你可以将两个复杂的数字添加到第三个,而不是让你可以让顾客加一罐花生酱等于采购订单,或者一些这样的愚蠢。