程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 體會一下什麼叫做強類型

體會一下什麼叫做強類型

編輯:關於C語言
首先聲明,這篇文章僅僅是個人的學習體會,並不是標准資料。如果有什麼謬誤,歡迎高手指出。

object o1 = new object();
string s1 = o1.ToString();    // s1 will be "System.Object"

object o2 = "hello";
string s2 = o2.ToString();    // s2 will be "hello"

這和C++很不相同。在C++裡面,o2.ToString()會調用object的ToString()方法,而不是string的ToString()方法。o2是對靜態string對象"hello"的一個引用,則o2雖然在語法上寫成了object類型,但它代表的是在內存裡的一個string對象。當程序試圖通過o2來調用ToString()方法的時候,系統首先要在內存裡面找到o2所代表的對象,然後在這個對象的函數表中找到合適的方法來執行。o2代表的是一個string對象,而string類型已經重載過ToString()方法,在o2所代表的string對象的函數表裡立刻就找到了ToString()方法,因此string類型的ToString()方法就被調用了。
這就是基於運行時的強類型。

具體到實現上的區別:
C++被編譯成匯編,調用是 jmp [address in memory],直接跳轉。
C#被編譯成IL,調用是callvirt ClassName.FunctionName,需要經過Runtime的翻譯。雖然最終也是要jmp到某個地址去執行的,但是跳轉的這個地址,卻是由Runtime在運行的時候根據ClassName.FunctionName和ClassInstance address計算出來的。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved