为什么 C# 要求运算符重载是静态方法而不是成员函数(如 C++)? (也许更具体地说:这个决定的设计动机是什么?)
埃里克·利珀特 (Eric Lippert) 在一篇文章中对此进行了极其详细的回答。博客文章 https://ericlippert.com/2007/05/14/why-are-overloaded-operators-always-static-in-c/此后该内容已被删除。这里是存档版本 https://web.archive.org/web/20151204153738/http://blogs.msdn.com/b/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx.
关于值类型和实例运算符还有另一个更微妙的点。静态运算符使这种代码成为可能:
class Blah {
int m_iVal;
public static Blah operator+ (Blah l, int intVal)
{
if(l == null)
l = new Blah();
l.m_iVal += intVal;
return l;
}
}
//main
Blah b = null;
b = b + 5;
因此,即使引用为空,您也可以调用该运算符。对于实例操作员来说,情况并非如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)