爲什麼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. 爲什麼.Net WPF DependencyProperties必須是類的靜態成員
- 8. 爲什麼數據庫名稱必須是靜態的?
- 9. 爲什麼委託必須是靜態的?
- 10. 爲什麼運算符重載失敗?
- 11. 爲什麼operator()[] - > =必須是非靜態成員?
- 12. 爲什麼jsp中的EL函數必須聲明爲靜態?
- 13. C++ - 什麼是運算符。*?
- 14. 爲什麼STL <set>重載運算符<函數必須是const函數?
- 15. 爲什麼你不能重載'。'運算符在C++中?
- 16. 爲什麼C#不允許運算符重載?
- 17. C++運算符在已重載的運算符中重載
- 18. 爲靜態類重載ostream <<運算符?
- 19. C++運算符重載是相等的運算符
- 20. 爲什麼靜態成員必須在main()之外初始化?
- 21. 爲什麼我必須把這個功能靜態
- 22. C++運算符重載==
- 23. 運算符重載C++
- 24. 運算符重載C++
- 25. 運算符重載C++
- 26. 運算符重載C++
- 27. C++運算符重載
- 28. +運算符重載在C++
- 29. C++約運算符重載
- 30. 在現代C++中重載算術運算符的「最佳」方法是什麼?
C++允許運營商免費(即非會員)功能。但是C#決定放棄對免費功能的斯大林禁令,所以你必須在那裏放置靜態。 – 2011-08-29 19:36:27