我對運算符在C#語言中的重載有點困惑,請問能否告訴我是運算符重載靜態或動態的本質。運算符在C#中重載#
2
A
回答
11
如果你的意思是「它是多態還是不?那麼答案是否定的 - 除非您使用dynamic
類型,否則運算符是由C#編譯器靜態發現的。例如,考慮下面的代碼:
using System;
class Test
{
static void Main(string[] args)
{
string x = "hello";
string y = new string(x.ToCharArray());
Console.WriteLine(x == y); // True
object ox = x;
object oy = y;
Console.WriteLine(ox == oy); // False
dynamic dx = x;
dynamic dy = y;
Console.WriteLine(dx == dy); // True
}
}
到==
第一個呼叫使用在string
聲明的操作,因爲編譯器知道這兩個操作數都string
型。它比較兩個字符序列,發現它們相等,並返回True。
第二次調用==
使用在object
聲明,因爲表達ox
和oy
的編譯時類型是object
操作。該操作員只比較參考。引用是不同的(它們指的是不同的值),所以這返回False。請注意,在這種情況下,的值的ox
和oy
將在執行時引用字符串,但不是在編譯器確定要調用哪個超載時應予以考慮。 (它只的ox
和oy
知道爲object
型的。)
到==
第三呼叫使用動態類型,發現在執行時操作,使用實際類型的引用,而不是表達式的編譯時類型。這發現string
中的過載,所以操作符再次返回True。
0
相關問題
- 1. C++運算符在已重載的運算符中重載
- 2. +運算符重載在C++
- 3. 重載[] []在C++運算符
- 4. C++:運算符重載,運算符+
- 5. 在C++中訪問重載運算符
- 6. 在C++中重載賦值運算符
- 7. 在C++中重載運算符`:=`
- 8. 運算符在C++中重載
- 9. 在C++中重載間接運算符
- 10. 在C++中重載<<運算符?
- 11. 在c中重載++和 - 運算符#
- 12. 運算符在C++中重載
- 13. '+'運算符在C++中重載
- 14. 在C++中重載bitshift運算符
- 15. 在C++中重載運算符+
- 16. 運算符在C++中重載
- 17. 在C++中重載<<運算符
- 18. 在C++中重載比較運算符
- 19. 在C++中重載新運算符
- 20. 在c#類中重載vb.net&運算符
- 21. 運算符在Visual C++中重載?
- 22. 在C++中重載插入運算符
- 23. 運算符在C++中重載
- 24. 在C++中重載(),[]運算符
- 25. 運算符重載C++ - 重載輸出「<<」運算符
- 26. 運算符在C++幫助中重載流提取運算符
- 27. 運算符重載C++
- 28. 運算符重載C++
- 29. 運算符重載C++
- 30. C++重載運算符[]