0
我發現一個類型的方法表包含: (1)在該類型中新定義的方法。 (2)在其基本類型中定義的虛擬方法。爲什麼方法表只包含基類的虛方法?
我完全可以理解,對於其他語言(例如C++)中的虛擬表格,只有虛擬方法需要存儲在表格中。但是對於C#,由於方法表並不完全等於虛擬表,因爲在該類型的方法表中存在在類型中新定義的非虛方法。因此我想知道爲什麼C#中的方法表是這樣設計的?爲什麼非虛擬基類型的方法不存儲,而類型本身的類型存儲。
感謝。
它有什麼問題嗎?爲什麼你想要在表中使用非虛擬方法?爲了什麼?問題不是學術問題(例如,來自實施他的'C#'編譯器的人)或無意義的問題(例如,一個人問「爲什麼?」,因爲他可以)。 – Sinatr
因爲它們已經存在於基類方法表中,所以不需要重複它們。雖然CLR可以自己解決這個問題,但很少需要編譯器已經發出對基類方法的調用。但當然它不能用於虛擬方法。方法綁定是一個很大的故事,特別是接口實現方法綁定的方式非常複雜。懷疑有人會寫這本手冊。 –