人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

C#與C++最大的不同也是與JAVA最大的相同:單根結構

C#與C++最大的不同也是與JAVA最大的相同:單根結構

更新時間:2021-02-19 文章作者:未知 信息來源:網絡 閱讀次數:

在面向對象的程序設計中,由于C++的引入而顯得尤為突出的一個問題是:所有類最終是否都應從單獨一個基礎類繼承。在
Java中(與其他幾乎所有OOP語言一樣),對這個問題的答案都是肯定的,而且這個終級基礎類的名字很簡單,就是一個
“Object”。這種“單根結構”具有許多方面的優點。
單根結構中的所有對象都有一個通用接口,所以它們最終都屬于相同的類型。另一種方案(就象C++那樣)是我們不能保證
所有東西都屬于相同的基本類型。從向后兼容的角度看,這一方案可與C模型更好地配合,而且可以認為它的限制更少一
些。但假期我們想進行純粹的面向對象編程,那么必須構建自己的結構,以期獲得與內建到其他OOP語言里的同樣的便利。
需添加我們要用到的各種新類庫,還要使用另一些不兼容的接口。理所當然地,這也需要付出額外的精力使新接口與自己
的設計方案配合(可能還需要多重繼承)。為得到C++額外的“靈活性”,付出這樣的代價值得嗎?當然,如果真的需要—
—如果早已是C專家,如果對C有難舍的情結——那么就真的很值得。但假如你是一名新手,首次接觸這類設計,象Java那
樣的替換方案也許會更省事一些。
單根結構中的所有對象(比如所有Java對象)都可以保證擁有一些特定的功能。在自己的系統中,我們知道對每個對象都
能進行一些基本操作。一個單根結構,加上所有對象都在內存堆中創建,可以極大簡化參數的傳遞(這在C++里是一個復雜
的概念)。
利用單根結構,我們可以更方便地實現一個垃圾收集器。與此有關的必要支持可安裝于基礎類中,而垃圾收集器可將適當
的消息發給系統內的任何對象。如果沒有這種單根結構,而且系統通過一個句柄來操縱對象,那么實現垃圾收集器的途徑
會有很大的不同,而且會面臨許多障礙。
由于運行期的類型信息肯定存在于所有對象中,所以永遠不會遇到判斷不出一個對象的類型的情況。這對系統級的操作來
說顯得特別重要,比如違例控制;而且也能在程序設計時獲得更大的靈活性。
但大家也可能產生疑問,既然你把好處說得這么天花亂墜,為什么C++沒有采用單根結構呢?事實上,這是早期在效率與控
制上權衡的一種結果。單根結構會帶來程序設計上的一些限制。而且更重要的是,它加大了新程序與原有C代碼兼容的難
度。盡管這些限制僅在特定的場合會真的造成問題,但為了獲得最大的靈活程度,C++最終決定放棄采用單根結構這一做
法。而Java不存在上述的問題,它是全新設計的一種語言,不必與現有的語言保持所謂的“向后兼容”。所以很自然地,
與其他大多數面向對象的程序設計語言一樣,單根結構在Java的設計方案中很快就落實下來。
---------------
這就像MFC里CObject的作用,無論是CWin還是CFile都可以上朔的CObject。
C#和JAVA是極為相像的。c#里object對象類型是所有類型之母,它是其它類型最根本的基類。因為它是所有對象的基類,
所以可把任何類型的值賦給它。例如,一個整型:
object theObj = 123;
對于C++程序員來說:object并不等價于void*。無論如何,忘掉指針總是個好主意。

正因為這種單根結構,我們可以非常容易的做cast,包括up-cast和down-cast,也就是說:在繼承樹里向上造型up-cast或
向下造型down-cast。
在C#里單根結構還成為了C#獨特的加框(作為一個對象利用)消框技術的理論基礎。

C#利用單根結構實現在C++里利用Template完成的功能。但我覺得C#沒有Template是一大損失。畢竟Template非常好的說。


溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 太保市| 凉山| 封开县| 宜君县| 清镇市| 棋牌| 太谷县| 佛山市| 临夏县| 临城县| 社会| 西宁市| 玛多县| 湘潭县| 新干县| 肥东县| 佛学| 商水县| 新巴尔虎右旗| 广昌县| 晋州市| 林州市| 绥中县| 广水市| 梁河县| 泽州县| 阿鲁科尔沁旗| 四会市| 阿克苏市| 罗源县| 邻水| 九龙城区| 修文县| 潢川县| 连州市| 普宁市| 东台市| 承德市| 苍溪县| 章丘市| 高雄市|