请问如何重载+=运算符?

.Net技术 码拜 9年前 (2015-05-11) 842次浏览 0个评论
 

有2个问题不明白

1. + 运算符可以重载,但是好像不能重载+=

2. 重载只能写在+ 两边任意一个的类中,例如要实现  cat + dog,就只能写在cat类或者dog类中,那么像list<string> + list<string>或者list<cat> + list<dog>这种怎么做?

谢谢

10分
1、+=不就是+号和=号么?
2、泛型不能重载,不过貌似版主知道通过反射方法实现
10分
+= 本来就不是运算符,它是c#语法糖。
引用 楼主 ihateot 的回复:

2. 重载只能写在+ 两边任意一个的类中,例如要实现  cat + dog,就只能写在cat类或者dog类中,那么像list<string> + list<string>或者list<cat> + list<dog>这种怎么做?

不能做。

20分
如果要变通,我给你写一个例子

public class MyListOfString
{
    public List<string> Contents;

    public static List<string> operator +(MyListOfString a, List<string> b)
    {
        return a.Contents.Concat(b).ToList();
    }

    public static implicit operator MyListOfString(List<string> a)
    {
        return new MyListOfString { Contents = a };
    }
}

那么对于两个 List<string>,你可以这样连接

var a = new List<string> { "aa" };
var b = new List<string> { "bb" };
var result = (MyListOfString)a + b;
多谢楼上两位的指点,明白了。

Ps:sp1234你的变通方法很好,确实这样可以实现list这种的+重载。不过这样的话可读性和直接写一个扩展方法a.join(b)差不多了。我本来想直接用+来操作使代码清晰一点.。总之谢谢指点。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请问如何重载+=运算符?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!