问题描述
第二个操作数的类型必须为int的原因吗?
is there a reason for the type of the second operand must be 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...
...
可以肯定的是...我可以重载operator *以获取(例如)字符串列表
Just for sure... I can overload operator* for get (for example) List of string
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中很常见(为输出重载),因为尚不清楚?当然,这只是C#设计人员的决定.仍然可以在意外/不清楚的地方(带有int)重载它.
but cannot overload left shift, well known from C++ std (overloaded for output), because it was unclear?Of course, it's just a decision of C# designers.Still it can be overloaded on something unexpected/unclear (with int).
真的是因为它的代码不清楚吗?
Really the reason is that it was made an unclear code?
推荐答案
是.这是因为语言规范需要它:
语言设计者没有没有做出决定-如果愿意,他们有可能消除该限制-但我认为规范的这一部分解释了他们的理由运算符重载的这个(和其他)限制:
The language designers didn't have to make that decision - it would have been possible for them to remove that restriction if the wanted to - but I think this part of the specification explains their reasoning for this (and other) restrictions on operator overloading:
他们可能希望位移位运算符始终像位移位运算符一样工作,而不是完全令人惊讶.
They probably wanted the bitshift operators to always behave like bitshift operators, and not as something completely surprising.
这篇关于C#移位运算符重载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!