Why don't structs support inheritance?

假設.net中的struct可以inherit。現有這樣的代碼:

BaseStruct a;
SubStruct b; //inherits from BaseStruct, added fields, etc.

a = b; //?? expand size during assignment?

這會出什麼問題?因爲struct是value type不是reference type,他們是copy by value,上面的a的size根本不能容納下b。

所以.net不支持。


在native c++又是如何呢?

同樣的代碼在native c++中,是可以的:雖然通過了編譯,但是功能上有問題(有object slice)。這就又回到了copy by value, copy by reference的問題上。如果上面的a和b都是指針(相當於.net中的reference type),同時重寫了operat=(這個容易忘,所以容易出錯),那麼就不會有問題。c++給程序員提供了更多的控制權:new出來的在heap上,只能通過指針來引用;非new出來的,在stack上,按位copy。

不巧的是,.net中,在heap還是在stack上,不是又程序員決定的,而是由type決定的。.net天然地幫我們定好 了每種type是reference type還是value type。


.net這個有受限,c++這個強是強但容易出錯,到底哪個好呢?應了一句話,權利越大,責任越重!自己選吧!


發佈了72 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章