c#-4.0 – C#shift operator overload
有没有理由第二个操作数的类型必须是int?
... // I would like to do this public static StringList operator<<(StringList list,string s) { list.Add(s); return list; } // but only int is supported... ... 编辑: class MyString { string val; public MyString(string s) { val = s; } public static List<string> operator*(MyString s,int count) { List<string> list = new List<string>(); while (count-- > 0) { list.Add(s.val); } return list; } } ... foreach (var s in new MyString("value") * 3) { s.print(); // object extension (Console.WriteLine) } // output: // value // value // value ... 但不能超载左移,从C std(输出重载)众所周知,因为它不清楚? 真的原因是它的代码不清楚了吗? 解决方法
是.这是因为
language specification需要它:
语言设计者不必做出这样的决定 – 如果想要的话,他们可能会删除这个限制 – 但我认为规范的这一部分解释了他们对运算符重载的这个(和其他)限制的推理:
他们可能希望bitshift运算符总是像bitshift运算符一样,而不是完全令人惊讶的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |