为什么C#要求运算符重载是静态方法而不是成员函数(如C++)? (也许更具体一点:这个决定的设计动机是什么?)为什么C#运算符重载必须是静态的?
19
A
回答
26
看看this post。
几个原因,主要似乎是保护运营商的对称性(使得二元运算的左侧没有得到特殊待遇,负责调度的操作)。
30
回答这里难以忍受的细节:
还有约值类型和实例运营商的另一个微妙的点。静态操作符使这种代码成为可能:
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;
因此即使引用为null,也可以调用该运算符。例如运营商就不会这样。
0
也许最好的想法是为什么这些方法不是静态的。没有需要国家,因此这。
+0
可能没有国家利益,但虚拟运营商超载会很酷。状态不是它在C#中不可用的原因。 – 2017-03-17 20:56:05
相关问题
- 1. 重载运算符<< - 必须是二元运算符
- 2. C++静态运算符重载
- 3. 运算符重载 - 为什么静态解析?
- 4. 运算符+ =重载,为什么是const?
- 5. 为什么运算符<<重载必须通过引用返回?
- 6. 什么是重写的C运算符++
- 7. 为什么ClassInitialize方法必须是静态的?
- 8. 为什么委托必须是静态的?
- 9. 为什么.Net WPF DependencyProperties必须是类的静态成员
- 10. 为什么数据库名称必须是静态的?
- 11. 抛出一个异常,为什么它必须是静态的?
- 12. 为什么重载运算符&&错误?
- 13. 为什么运算符重载失败?
- 14. 为什么operator()[] - > =必须是非静态成员?
- 15. 为什么依赖属性必须是静态
- 16. 对于所有的.NET运算符,重载方法必须是公共的和静态的吗?
- 17. 为什么运算符重载实现中的两个静态对象在C++中总是相等的?
- 18. 为什么C++将赋值(=)视为重载运算符?
- 19. 什么是C++中的重载运算符?
- 20. C++ - 什么是运算符。*?
- 21. 为什么jsp中的EL函数必须声明为静态?
- 22. C++:运算符重载,运算符+
- 23. 为什么STL <set>重载运算符<函数必须是const函数?
- 24. 为什么C#不允许运算符重载?
- 25. Visual C++ 2012:为什么priority_queue需要重载赋值运算符?
- 26. 为什么你不能重载'。'运算符在C++中?
- 27. 为什么。*运算符不能在C++中重载?
- 28. 重载运算符C++:为什么分母乘以10
- 29. 在此示例中是否为重载运算符=必需的?
- 30. C++运算符在已重载的运算符中重载
C++允许运营商免费(即非会员)功能。但是C#决定放弃对免费功能的斯大林禁令,所以你必须在那里放置静态。 – 2011-08-29 19:36:27