1. 與結(jié)構(gòu)化編程方法相比,面向?qū)ο缶幊逃心男﹥?yōu)點(diǎn)?
【解答】
(1) 以過程為中心和對象為中心的比較
結(jié)構(gòu)化編程方法是以過程為中心的,當(dāng)面對一個(gè)問題時(shí),該方法側(cè)重于問題解決過程的層次結(jié)構(gòu)。面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法側(cè)重于對象。對象具有特定的行為和屬性,行為和屬性決定了對象與其他對象的交互作用方式,以及對象本身的行為方式。
(2) 公開數(shù)據(jù)和隱藏?cái)?shù)據(jù)的比較
結(jié)構(gòu)化編程方法對數(shù)據(jù)和過程僅僅進(jìn)行簡單的包裝,這些數(shù)據(jù)和過程是公開的,或者說程序中的其他代碼可以訪問這些數(shù)據(jù)和過程。面向?qū)ο蟮膶?shí)現(xiàn)隱藏了特定的數(shù)據(jù),并且只把對象的特定行為公開給用戶。實(shí)現(xiàn)這些特定行為的代碼對用戶來說是不可見的,用戶只能訪問這些公開的行為。
(3) 單一單元和標(biāo)準(zhǔn)單元的比較
結(jié)構(gòu)化編程方法是基于單一代碼單元的。面向?qū)ο蟮木幊谭椒ㄔ试S對象是獨(dú)立的。
(4) 一次性使用和可重用的比較
根據(jù)不同的實(shí)現(xiàn),結(jié)構(gòu)化過程可能無法重用。而面向?qū)ο蟮姆椒ǎ瑢ο笫且粋€(gè)模塊單元。具有完備的實(shí)體,因此可以具有高度的可重用性。
(5) 有序算法和無序算法的比較
結(jié)構(gòu)化編程方法所開發(fā)的程序,其結(jié)構(gòu)往往是線性的(或者說是自頂向下的)。而面向?qū)ο蟮膽?yīng)用程序是一種基于消息或者事件驅(qū)動(dòng)的程序類型。每個(gè)對象都可以向其他對象發(fā)送消息。windows操作系統(tǒng)就是這樣的程序。
2. 簡要回答下列問題。
1) 舉例說明new關(guān)鍵字可用于那些方面?
2) sealed關(guān)鍵字的作用是什么?什么情況下需要使用sealed關(guān)鍵字?
3) 哪些關(guān)鍵字可以用于版本控制?
【解答】
1) 在c#中,new關(guān)鍵字可用作運(yùn)算符或修飾符。作為運(yùn)算符用于在堆上創(chuàng)建對象和調(diào)用構(gòu)造函數(shù)。作為修飾符用于隱藏基類成員的繼承成員。
2) 在類聲明中使用sealed修飾符可防止其它類繼承此類。在方法聲明中使用sealed修飾符可防止擴(kuò)充類重寫此方法。
sealed修飾符主要用于防止非有意的派生,但是它還能促使某些運(yùn)行時(shí)優(yōu)化。具體說來,由于密封類永遠(yuǎn)不會有任何派生類,所以對密封類的實(shí)例的虛擬函數(shù)成員的調(diào)用可以轉(zhuǎn)換為非虛擬調(diào)用來處理。
3) override關(guān)鍵字和new關(guān)鍵字均可用于版本控制。
在c#中,默認(rèn)情況下方法不是虛擬的。若要使方法成為虛擬方法,必須在基類的方法聲明中使用virtual修飾符。然后,派生類可以使用override關(guān)鍵字重寫基類中的虛擬方法,或使用new關(guān)鍵字隱藏基類中的虛擬方法。如果override關(guān)鍵字和new關(guān)鍵字均未指定,編譯器將發(fā)出警告,并且派生類中的方法將隱藏基類中的方法。
3. 簡要回答抽象類和接口的主要區(qū)別。
【解答】
抽象類和接口的一個(gè)主要差別是:類可以實(shí)現(xiàn)多個(gè)接口,但僅能從一個(gè)抽象類或任何其它類型的類繼承。
4. 使用委托的優(yōu)點(diǎn)是什么?委托和事件有什么區(qū)別和聯(lián)系?
【解答】
c#中的委托類似于c或c++中的函數(shù)指針。使用委托使程序員可以將方法引用封裝在委托對象內(nèi)。然后可以將該委托對象傳遞給可調(diào)用所引用方法的代碼,而不必在編譯時(shí)知道將調(diào)用哪個(gè)方法。與c或c++中的函數(shù)指針不同,委托是面向?qū)ο螅沂穷愋桶踩摹?/p>
c#中的“事件”是當(dāng)對象發(fā)生某些事情時(shí),類向該類的客戶提供通知的一種方法。事件最常見的用途是用于圖形用戶界面;通常,表示界面中的控件的類具有一些事件,當(dāng)用戶對控件進(jìn)行某些操作(如單擊某個(gè)按鈕)時(shí),將通知這些事件。
使用委托來聲明事件。委托對象封裝一個(gè)方法,以便可以匿名調(diào)用該方法。事件是類允許客戶為其提供方法(事件發(fā)生時(shí)應(yīng)調(diào)用這些方法)的委托的一種方法。事件發(fā)生時(shí),將調(diào)用其客戶提供給它的委托。
5. 編寫一個(gè)控制臺應(yīng)用程序,完成下列功能,并回答提出的問題。
1) 創(chuàng)建一個(gè)類a,在構(gòu)造函數(shù)中輸出“a”,再創(chuàng)建一個(gè)類b,在構(gòu)造函數(shù)中輸出“b”。
2) 從a繼承一個(gè)名為c的新類,并在c內(nèi)創(chuàng)建一個(gè)成員b。不要為c創(chuàng)建構(gòu)造函數(shù)。
3) 在main方法中創(chuàng)建類c的一個(gè)對象,寫出運(yùn)行程序后輸出的結(jié)果。
4) 如果在c中也創(chuàng)建一個(gè)構(gòu)造函數(shù)輸出“c”,整個(gè)程序運(yùn)行的結(jié)果又是什么?
【解答】
輸出結(jié)果:
b
a
如果在c中也創(chuàng)建一個(gè)構(gòu)造函數(shù)輸出“c”,即添加:
則整個(gè)程序運(yùn)行的結(jié)果為:
b
a
c
6. 編寫一個(gè)控制臺應(yīng)用程序,完成下列功能,并寫出運(yùn)行程序后輸出的結(jié)果。
1) 創(chuàng)建一個(gè)類a,在a中編寫一個(gè)可以被重寫的帶int類型參數(shù)的方法mymethod,
并在該方法中輸出傳遞的整型值加10后的結(jié)果。
2) 再創(chuàng)建一個(gè)類b,使其繼承自類a,然后重寫a中的mymethod方法,將a中接
收的整型值加50,并輸出結(jié)果。
3) 在main方法中分別創(chuàng)建類a和類b的對象,并分別調(diào)用mymethod方法。
【解答】
輸出結(jié)果:
12
52
7. 假設(shè)node類的每一個(gè)節(jié)點(diǎn)包括有兩個(gè)字段:m_data(引用節(jié)點(diǎn)的數(shù)據(jù))和m_next(引用鏈接列表中的下一項(xiàng))。這兩個(gè)字段都是由構(gòu)造函數(shù)方法設(shè)置的。該類有兩個(gè)功能,第一個(gè)功能是通過名為data和next的只讀屬性訪問m_data和m_next字段。第二個(gè)功能是對system.object的tostring虛擬方法進(jìn)行重寫。試分別用類和泛型兩種方法編寫程序?qū)崿F(xiàn)上述功能。
【解答】
新聞熱點(diǎn)
疑難解答
圖片精選