![C編程基礎(chǔ)練習(xí)題集和答案_第1頁](http://file4.renrendoc.com/view14/M04/2D/30/wKhkGWcfG7-AVyFsAAMm9t1qlpk769.jpg)
![C編程基礎(chǔ)練習(xí)題集和答案_第2頁](http://file4.renrendoc.com/view14/M04/2D/30/wKhkGWcfG7-AVyFsAAMm9t1qlpk7692.jpg)
![C編程基礎(chǔ)練習(xí)題集和答案_第3頁](http://file4.renrendoc.com/view14/M04/2D/30/wKhkGWcfG7-AVyFsAAMm9t1qlpk7693.jpg)
![C編程基礎(chǔ)練習(xí)題集和答案_第4頁](http://file4.renrendoc.com/view14/M04/2D/30/wKhkGWcfG7-AVyFsAAMm9t1qlpk7694.jpg)
![C編程基礎(chǔ)練習(xí)題集和答案_第5頁](http://file4.renrendoc.com/view14/M04/2D/30/wKhkGWcfG7-AVyFsAAMm9t1qlpk7695.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
...wd......wd......wd...1.面向?qū)ο蟮乃枷胫饕ㄊ裁创?個(gè)人認(rèn)為一各程序語言要成為真正的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它必須符合以下條件:1抽象(abstraction)—抽象能夠有效地管理一個(gè)問題的復(fù)雜性,其作法是劃分出與該問題相關(guān)的一組對象.2封裝(Encapsulation)—封裝是指將一個(gè)抽象的內(nèi)部實(shí)現(xiàn)隱藏在特定的對象之內(nèi).3多態(tài)(polymorphism)—多態(tài)會提供一樣方法的多種操作方法的多種操作實(shí)作.例如,不同的對象都會擁有一個(gè)Save方法,但是每一個(gè)Save方法會執(zhí)行不同的操作.4繼承(inheritance)—VisualC#2005最令人興奮之處就是其繼承特性.vc#2005則提供了真正的方法繼承,因此您可以重復(fù)使用一個(gè)類的實(shí)例.2.什么是ASP.net中的用戶控件自己動(dòng)手作自己的控件來取代.NET提供的控件。這種控件就是用戶控件。后綴為.ascx3.什么叫應(yīng)用程序域什么是受管制的代碼什么是強(qiáng)類型系統(tǒng)什么是裝箱和拆箱什么是重載什么是多態(tài)?CTS、CLS和CLR分別作何解釋應(yīng)用程序域:應(yīng)用程序域〔通常是AppDomain〕是用于隔離應(yīng)用程序的虛擬進(jìn)程。在同一個(gè)應(yīng)用程序作用域中創(chuàng)立的所有對象〔換句話說,從該應(yīng)用程序的入口點(diǎn)開場沿著對象激活序列的任何地方〕都在同一個(gè)應(yīng)用程序域中創(chuàng)立。多個(gè)應(yīng)用程序域可以存在于一個(gè)操作系統(tǒng)進(jìn)程中,使它們成為隔離應(yīng)用程序的簡便方式。操作系統(tǒng)進(jìn)程通過使用各不一樣的內(nèi)存地址空間來提供隔離。盡管它是有效的,但也是代價(jià)昂貴的,并且不能到達(dá)大型Web服務(wù)器所需要的數(shù)量。與其相比,公共語言運(yùn)行時(shí)通過管理在應(yīng)用程序域中運(yùn)行的代碼的內(nèi)存使用來強(qiáng)制進(jìn)展應(yīng)用程序隔離。這樣就確保它不會訪問應(yīng)用程序域以外的內(nèi)存。需要注意的是,只有類型安全的代碼才能以這種方式管理〔當(dāng)在應(yīng)用程序域中加載不安全代碼時(shí),運(yùn)行時(shí)不能保證隔離〕。理解應(yīng)用程序域:應(yīng)用程序域是.NET運(yùn)行庫的邏輯進(jìn)程表示,操作系統(tǒng)進(jìn)程可以包含多個(gè)應(yīng)用程序域。應(yīng)用程序域具有以下優(yōu)點(diǎn):1、隱藏了進(jìn)程具體的操作系統(tǒng)信息。從而允許把.NET放在不同的操作系統(tǒng)下。2、提供了隔離。即使運(yùn)行在同一個(gè)進(jìn)程中的屬于不同域的應(yīng)用程序也不能直接共享全局?jǐn)?shù)據(jù)、靜態(tài)數(shù)據(jù)或其他資源。所以,一個(gè)應(yīng)用程序域失敗了,也不會影響到同一個(gè)進(jìn)程中的其他應(yīng)用程序域。3、對于不需要昂貴的IPC機(jī)制的進(jìn)程,應(yīng)用程序域允許.NET運(yùn)行庫優(yōu)化運(yùn)行在這種進(jìn)程中的應(yīng)用程序間的通信。因?yàn)閼?yīng)用程序域是被隔離的,所有.NET對象都會被界定在創(chuàng)立它的應(yīng)用程序域內(nèi)。如果跨應(yīng)用程序域的邊界傳遞對象引用,該被引用對象就被稱為遠(yuǎn)程對象。裝箱和拆箱在C#中的有兩種類型的變量:值類型和引用類型。當(dāng)值類型和引用類型相互轉(zhuǎn)化時(shí),會發(fā)生裝箱和拆箱的過程。這里有一點(diǎn)要聲明:經(jīng)過拆箱或裝箱的對象會多出它自己一份拷貝。它和它的拷貝不在一個(gè)存儲區(qū)域。這也是值類型和引用類型的區(qū)別所在。值類型總是在棧中,而引用類型總是在托管堆中?!材壳癑2SE5.0也支持了裝箱和拆箱,但是我目前不知道是否和C#一樣〕。為了進(jìn)一步理解看下面例子:structPoint{publicintx;publicinty;}staticvoidMain(){Pointp;p.x=10;p.y=20;Objecto=p;//box.將值類型從棧中拷貝到堆中。/************************************************************************/*從托管堆中將對象拷貝到棧中。/************************************************************************/Pointp2=(Point)p;Console.WriteLine(“p2.x:="+p2.x+“p2.y:=“+p2.x);p.x=16;p.y=34;Console.WriteLine(“p2.x:="+p2.x+“p2.y:=“+p2.x);Console.WriteLine(“p.x:="+p.x+“p.y:=“+p.x);}輸出結(jié)果為:p2.x:=10;p2.y=20;p2.x:=10;p2.y=20;p.x:=16;p.y=34;可知,變量經(jīng)過拆箱/裝箱后,得到是自己的另一份拷貝。裝箱和取消裝箱的概念是C#的類型系統(tǒng)的核心。它在“值類型〞和“引用類型〞之間的架起了一座橋梁,使得任何“值類型〞的值都可以轉(zhuǎn)換為object類型的值,反過來轉(zhuǎn)換也可以。裝箱和取消裝箱使我們能夠統(tǒng)一地來考察類型系統(tǒng),其中任何類型的值最終都可以按對象處理多態(tài)一.形象理解兩條理解的原則:〔1〕一個(gè)派生類對象可以被聲明成一個(gè)基類,或者是一個(gè)基類指針可以指向一個(gè)派生類對象://c++codeBaseClass*p;DerivedClassobj;p=&obj;//C#codeBaseClassobj=newDerivedClass();〔2〕把一個(gè)對象看做是一個(gè)獨(dú)立的個(gè)體,調(diào)用對象的public成員函數(shù)實(shí)際上是給這個(gè)對象發(fā)送一個(gè)消息,采取什么樣的動(dòng)作完全由對象自己決定。Shape是基類,Circle和Line是從Shape繼承出來的,Shape有draw()方法,Circle與Line分別自己定義了自己的draw()方法,在下面的代碼里://JavaCodestaticvoidfunc(Shapes){s.Draw();}如果發(fā)生了這樣的調(diào)用:Linel=newLine();Circlec=newCircle();func(l);func(c);一個(gè)Circle和一個(gè)Line被當(dāng)做Shape傳到函數(shù)里去了,然后調(diào)用Draw(),會發(fā)生什么情況因?yàn)閷ο笫仟?dú)立的個(gè)體,在func()里,這兩個(gè)對象被分別傳遞了Draw()消息,叫它們繪制自己吧,于是他們分別調(diào)用了自己類里定義的Draw()動(dòng)作。通過這兩條原則我們可以理解上面的多態(tài)。正是由于多態(tài),使得我們不必要這樣去做:IF你是一個(gè)CircleTHEN調(diào)用Circle的Draw()ELSEIF你是一個(gè)LineTHEN調(diào)用Line的Draw()ELSE…我們只要給這個(gè)被聲明成為Shape的對象發(fā)送Draw消息,若何樣去Draw就由對象自己去決定了。二.一切皆因虛函數(shù)先看看實(shí)現(xiàn)多態(tài)的基本條件:〔1〕基類含有虛函數(shù)〔2〕繼承類把這個(gè)虛函數(shù)重新實(shí)現(xiàn)了〔3〕繼承類也可能沒有重新實(shí)現(xiàn)基類的所有虛函數(shù),因此對于這些沒有被重新實(shí)現(xiàn)的虛函數(shù)不能發(fā)生多態(tài)。再看一下幾種語言里一些特別的規(guī)定:1.C++:〔1〕虛函數(shù)用virtual關(guān)鍵字聲明?!?〕virtualvoidFunc(para_list)=0;這樣的虛函數(shù)叫做純虛函數(shù),表示這個(gè)函數(shù)沒有具體實(shí)現(xiàn)。包含純虛函數(shù)的類叫做抽象類,如果他的繼承類沒有對這個(gè)純虛函數(shù)具體用代碼實(shí)現(xiàn),則這個(gè)繼承類也是抽象類。抽象類不能被實(shí)例話〔就是說不能創(chuàng)立出對象〕?!?〕繼承類重新實(shí)現(xiàn)基類的虛函數(shù)時(shí),不需要做任何特別的聲明。〔4〕如果不用virtual關(guān)鍵字修飾,并且在派生類里重新實(shí)現(xiàn)了這個(gè)方法,這僅僅是一個(gè)簡單的覆蓋,不會發(fā)生多態(tài),我們暫稱它非多態(tài)吧。2.Java:〔1〕Java沒有virtual關(guān)鍵字,Java把一切類的方法都認(rèn)為是虛函數(shù)?!?〕繼承類重新實(shí)現(xiàn)基類的虛函數(shù)時(shí),不需要做任何特別的聲明。因此在Java里只要重新實(shí)現(xiàn)了基類的方法,并且把繼承類對象聲明為基類,多態(tài)就要發(fā)生。因此Java對多態(tài)的條件相對是對比低的。//JavaCodeclassBaseClass{publicvoidhello(){};}classDerivedClassextendsBaseClass{publicvoidhello(){System.out.println(“Helloworld!〞);}publicstaticvoidmain(Stringargs[]){BaseClassobj=newDerivedClass();obj.hello();}}輸入是Helloworld!。這樣就實(shí)現(xiàn)了多態(tài)。〔3〕虛函數(shù)用abstract聲明,含有虛函數(shù)的類是抽象類,也要用abstract關(guān)鍵字修飾。//JavaCodepublicabstractAbstractClass{publicabstractvoidhello();//…}3.C#:C#對于多態(tài)的編寫是最為嚴(yán)格和嚴(yán)謹(jǐn)?shù)??!?〕虛函數(shù)用virtual聲明?!?〕純虛函數(shù)用abstract聲明,含純虛函數(shù)的類是抽象類,必須用abstract關(guān)鍵字修飾。〔3〕如果僅僅是覆蓋基類的非虛方法,則需要用new關(guān)鍵字聲明://C#CodepublicclassBaseClass{publicvoidhello(){System.Console.WriteLine(“Hello,thiscomefromBaseClass〞);}}publicclassDerivedClass:BaseClass{publicnewvoidhello(){System.Console.WriteLine(“Hello,thisiscomefromDerivedClass〞);}publicstaticvoidMain(){BaseClassobj=newDerivedClass();obj.hello();}}輸出為Hello,thiscomefromBaseClass,也就是說這并沒有實(shí)現(xiàn)多態(tài)〔非多態(tài)〕?!?〕通過virtual–override、abstract–override組合實(shí)現(xiàn)多態(tài)。當(dāng)派生類重新實(shí)現(xiàn)基類的虛函數(shù)〔或純虛函數(shù)〕時(shí),必須用override關(guān)鍵字進(jìn)展修飾。//C#CodepublicabstractclassAbsBaseClass{publicabstractvoidhello();}publicclassDerivedClass:AbsBaseClass{publicvoidhello(){System.Console.WriteLine(“Helloworld!〞);}publicstaticvoidSayHello(AbsBaseClassobj){obj.hello();}publicstaticvoidMain(){DerivedClass_obj=newDerivedClass();DerivedClass.SayHello(_obj);}}輸出為Helloworld!三.多態(tài)的反溯繼承類對象在發(fā)生多態(tài)時(shí),并是不完全拋開基類不管的,它會去查看基類的虛函數(shù)列表,在這個(gè)列表的范圍內(nèi)才會發(fā)生多態(tài)。讓我們來看一個(gè)對比復(fù)雜的例子://JavaCodeclassA{protectedvoidhello(Objecto){System.out.println("A-Object");}}classBextendsA{protectedvoidhello(Strings){System.out.println("B-String");}protectedvoidhello(Objecto){System.out.println("B-Object");}};classC{publicstaticvoidmain(Stringargs[]){Objectobj=newObject();Stringstr="ABC";Aa=newB();a.hello(obj);a.hello(str);}};輸出結(jié)果為:B–ObjectB–Object正如上面所說的,由于基類里沒有參數(shù)類型為String的虛函數(shù),因此B的hello(String)方法不參與多態(tài)。調(diào)用a.hello(str)時(shí),由于String是Object的繼承類,因此這個(gè)str被作為一個(gè)Object傳入了B的hello(Object),這一點(diǎn)正如我們的原則一所述。四.接口——僅僅是更抽象的抽象類接口是類的協(xié)定,但由于接口又參與多態(tài)性,從這一點(diǎn)說,我們認(rèn)為它是更為抽象的抽象類:CTS、CLS和CLR.NET結(jié)合Java和COM解決方案兩者優(yōu)點(diǎn)來解決互操作性問題。類似于COM定義的標(biāo)準(zhǔn)二進(jìn)制格式,.NET定義了一個(gè)稱為通用類型系統(tǒng)CommonTypeSystem(CTS)的類型標(biāo)準(zhǔn)。這個(gè)類型系統(tǒng)不但實(shí)現(xiàn)了COM的變量兼容類型,而且還定義了通過用戶自定義類型的方式來進(jìn)展類型擴(kuò)展。任何以.NET平臺作為目標(biāo)的語言必須建設(shè)它的數(shù)據(jù)類型與CTS的類型間的映射。所有.NET語言共享這一類型系統(tǒng),實(shí)現(xiàn)它們之間無縫的互操作。該方案還提供了語言之間的繼承性。例如,用戶能夠在VB.NET中派生一個(gè)由C#編寫的類。很顯然,編程語言的區(qū)別不僅僅在于類型。例如,一些語言支持多繼承性,一些語言支持無符號數(shù)據(jù)類型,一些語言支持運(yùn)算符重載。用戶應(yīng)認(rèn)識到這一點(diǎn),因此.NET通過定義公共語言標(biāo)準(zhǔn)(CLS:CommonLanguageSpecification),限制了由這些不同引發(fā)的互操作性問題。CLS制定了一種以.NET平臺為目標(biāo)的語言所必須支持的最小特征,以及該語言與其他.NET語言之間實(shí)現(xiàn)互操作性所需要的完備特征。認(rèn)識到這點(diǎn)很重要,這里討論的特征問題已不僅僅是語言間的簡單語法區(qū)別。例如,CLS并不去關(guān)心一種語言用什么關(guān)鍵字實(shí)現(xiàn)繼承,只是關(guān)心該語言若何支持繼承。CLS是CTS的一個(gè)子集。這就意味著一種語言特征可能符合CTS標(biāo)準(zhǔn),但又超出CLS的范疇。例如:C#支持無符號數(shù)字類型,該特征能通過CTS的測試,但CLS卻僅僅識別符號數(shù)字類型。因此,如果用戶在一個(gè)組件中使用C#的無符號類型,就可能不能與不使用無符號類型的語言(如VB.NET)設(shè)計(jì)的.NET組件實(shí)現(xiàn)互操作。這里用的是“可能不〞,而不是“不可能〞,因?yàn)檫@一問題實(shí)際依賴于對non-CLS-compliant項(xiàng)的可見性。事實(shí)上,CLS規(guī)則只適用于或局部適用于那些與其他組件存在聯(lián)系的組件中的類型。實(shí)際上,用戶能夠安全實(shí)現(xiàn)含私有組件的工程,而該組件使用了用戶所選擇使用的.NET語言的全部功能,且無需遵守CLS的標(biāo)準(zhǔn)。另一方面,如果用戶需要.NET語言的互操作性,那么用戶的組件中的公共項(xiàng)必須完全符合CLS標(biāo)準(zhǔn)。讓我們來看下面的C#代碼:publicclassFoo{//Theuint(unsignedinteger)typeisnon-CLScompliant.//Butsincethisitemisprivate,theCLSrulesdonotapply.privateuintA=4;//Sinceshisuintmemberispublic,wehaveaCLS//complianceissue.publicuintB=5;//ThelongtypeisCLScompliant.publiclongGetA(){returnA;}}最后一個(gè)C是公共語言運(yùn)行庫CommonLanguageRuntime(CLR)。簡單地說,CLR是CTS的實(shí)現(xiàn),也就是說,CLR是應(yīng)用程序的執(zhí)行引擎和功能齊全的類庫,該類庫嚴(yán)格按照CTS標(biāo)準(zhǔn)實(shí)現(xiàn)。作為程序執(zhí)行引擎,CLR負(fù)責(zé)安全地載入和運(yùn)行用戶程序代碼,包括對不用對象的垃圾回收和安全檢查。在CLR監(jiān)控之下運(yùn)行的代碼,稱為托管代碼(managedcode)。作為類庫,CLR提供上百個(gè)可用的有用類型,而這些類型可通過繼承進(jìn)展擴(kuò)展。對于文件I/O、創(chuàng)立對話框、啟動(dòng)線程等類型——基本上能使用WindowsAPI來完成的操作,都可由其完成。讓我們正確對待“3C〞。開發(fā)人員在構(gòu)建自己的分布式應(yīng)用程序時(shí),因?yàn)橛脩粼诰幊虝r(shí)將直接面對CLR,應(yīng)將主要精力放在學(xué)習(xí)了解CLR上,而不是CTS和CLS。而對于希望以.NET平臺為目標(biāo)的語言和工具開發(fā)商來說,就需要深入理解CTS和CLS。互操作性組件是分布式應(yīng)用的關(guān)鍵,因此理解.NET若何通過定義公共類型實(shí)現(xiàn)這一目標(biāo),也就顯得十分重要。4.列舉一下你所了解的XML技術(shù)及其應(yīng)用5.值類型和引用類型的區(qū)別寫出C#的樣例代碼Ref與Out的區(qū)別。Ref與Out的區(qū)別是一樣點(diǎn):1.使參數(shù)按引用傳遞,注意這里的“引用〞與我們通常說的“對象引用〞不一樣,可以形象的理解為,類似于C/C++中傳指針〔地址〕。2.效果是,被調(diào)用方對該參數(shù)的修改會反映到該變量中,即當(dāng)調(diào)用完畢返回時(shí),調(diào)用方看到的是修改正的值。3.方法定義和調(diào)用方法都必須顯式使用ref或者out關(guān)鍵字不同點(diǎn):1。傳遞到ref的參數(shù)必須最先初始化,即由調(diào)用方顯式初始化。2。傳遞到out的參數(shù)在傳遞之前不需要顯式初始化,但需要調(diào)用方在方法返回之前必須對其賦值。使用場景:關(guān)于重載說明:1。ref和out關(guān)鍵字在運(yùn)行時(shí)的處理方式不同,但在編譯時(shí)的處理方式一樣。因此,如果一個(gè)方法采用ref參數(shù),而另一個(gè)方法采用out參數(shù),則無法重載這兩個(gè)方法。2。但是,如果一個(gè)方法采用ref或out參數(shù),而另一個(gè)方法不采用這兩類參數(shù),則可以進(jìn)展重載。使用ref前必須對變量賦值,out不用。out的函數(shù)會清空變量,即使變量已經(jīng)賦值也不行,退出函數(shù)時(shí)所有out引用的變量都要賦值,ref引用的可以修改,也可以不修改。區(qū)別可以參看下面的代碼:usingSystem;classTestApp{staticvoidoutTest(outintx,outinty){//離開這個(gè)函數(shù)前,必須對x和y賦值,否則會報(bào)錯(cuò)。//y=x;//上面這行會報(bào)錯(cuò),因?yàn)槭褂昧薿ut后,x和y都清空了,需要重新賦值,即使調(diào)用函數(shù)前賦過值也不行x=1;y=2;}staticvoidrefTest(refintx,refinty){x=1;y=x;}publicstaticvoidMain(){//outtestinta,b;//out使用前,變量可以不賦值outTest(outa,outb);Console.WriteLine("a={0};b={1}",a,b);intc=11,d=22;outTest(outc,outd);Console.WriteLine("c={0};d={1}",c,d);//reftestintm,n;//refTest(refm,refn);//上面這行會出錯(cuò),ref使用前,變量必須賦值into=11,p=22;refTest(refo,refp);Console.WriteLine("o={0};p={1}",o,p);}}6.ADO.net中常用的對象有哪些分別描述一下。Connection
對象Command與DataReader
對象DataSet
與DataAdapter
7.若何理解委托單從委托的概念上來講,很簡單,就是對方法的引用,包括靜態(tài)方法和對象實(shí)例的方法,有點(diǎn)類似C語言中的方法指針,不過方法指針只能引用靜態(tài)方法!而且委托是類安全的!一句話來概括:委托就是方法的入口!
調(diào)用委托就是調(diào)用方法,可能有人會說既然調(diào)用委托就是調(diào)用方法,那為什么不直接調(diào)用方法了,干嗎非得通過委托來調(diào)用!一開場我也是這么想,包括現(xiàn)在也還有這個(gè)疑惑,個(gè)人覺得,如果撇開事件來說,委托除了匿名方法名稱之外,沒有具體實(shí)質(zhì)型的好處!意思就是說我們?nèi)绻皇窃谑录镉梦?和直接調(diào)用方法是沒有本質(zhì)區(qū)別的!
至于委托的聲明格式,其基本語法為:修飾符delegate返回類型代理名稱(參數(shù)列表)
比方說publicdelegatevoidMyDelegate(inti);實(shí)例化的時(shí)候給它賦值一個(gè)方法(實(shí)例或靜態(tài)方法)名就可以了MyDelegateMD=newMyDelegate(類中的方法名)
委托還可以實(shí)現(xiàn)多重委托,可以用Combine方法講不同代理組在一起,也可以用Remove方法從多重代理中除去一個(gè)代理,不過在我們實(shí)際使用可以不需要這么麻煩,用+,-可以到達(dá)這個(gè)目的!
比方說:
MyDelegateMD=newMyDelegate(方法1);
MyDelegateMD2=newMyDelegate(方法2);
MyDelegateMD3=MD+MD2;
也可以這么寫MyDelegateMD3+=newMyDelegate(方法1);
MyDelegateMD3+=newMyDelegate(方法2);執(zhí)行代理MD3就是調(diào)用方法1和方法2;
多重代理個(gè)人覺得在事件委托中用處很大,因?yàn)樵趯?shí)際對象中,一個(gè)方法執(zhí)行會觸發(fā)多個(gè)方法相繼執(zhí)行,這個(gè)時(shí)候會需要多重代理這個(gè)概念!使用多重代理的時(shí)候要注意方法返回類型必須是void類型的!PS:在代理類中有2個(gè)屬性,一個(gè)是Method,表示所應(yīng)用方法的名稱!另一個(gè)是Target,表示實(shí)例方法所在對象的類型,如果是靜態(tài)方法,則返回NULL
事件(Event)
正如我上面說的那樣,如果撇開事件,委托好似沒有多大用途,但也只是假設(shè),委托就是為事件服務(wù)的,兩者是分不開的.言事件比言委托!在C#中,事件和屬性,方法一樣,是類的一種成員,通過事件的使用,可以在類的對象發(fā)生某種變化,通過事件,來觸發(fā)某些方法來處理事件的發(fā)生!
舉個(gè)通俗的例子,在ASP.NET的窗體生成種,拖進(jìn)來一個(gè)按鈕,雙擊它,頁面后臺會自動(dòng)生成按鈕事件的方法名稱,編程人員只要在該方法體內(nèi)寫上具體方法即可!那么按鈕類里面是若何實(shí)現(xiàn)的了?
具體是這樣的,在按鈕類里面聲明了一個(gè)事件委托:
publicenvetEventHandlerClick;
并寫了一個(gè)觸發(fā)該事件的方法:
protectedvirtualvoidOnClick(EventArgese)
{
if(Click!=Null)
{
Click(this,e)
}
}
而什么時(shí)候調(diào)用上面這個(gè)方法,根據(jù)程序構(gòu)造類型不同而異,在WEB應(yīng)用程序中,是通過回傳事件接口來調(diào)用上面這個(gè)方法,在按鈕類里只是實(shí)現(xiàn)了事件委托,具體雙擊按鈕觸發(fā)的實(shí)際方法是在頁面程序里編寫的!(PS:所以這也是我認(rèn)為使用事件委托的最大好處,機(jī)動(dòng)行好,靈活,如果不用委托,而是直接調(diào)用方法,那么所調(diào)用的方法就固定死了,不利于實(shí)際面向?qū)ο缶幊讨谐霈F(xiàn)的未預(yù)型方法,不靈活了)
在頁面程序?yàn)榘粹o綁定事件委托所引用的方法是開發(fā)環(huán)境自動(dòng)幫我們完成的,但我們要清楚實(shí)現(xiàn)的必要步驟:
在頁面程序里必須給按鈕的事件實(shí)例化方法,在ASP.NET的頁面代碼中的privatevoidInitializeComponent()里要寫上:
this.Button1.Click+=newSystem.EventHandler(this.Button1_Click);//這里this.Button1_Click指具體執(zhí)行的方法名稱然后就可以在this.Button1_Click方法里寫上具體要執(zhí)行的代碼!
綜上所述,實(shí)現(xiàn)事件的步驟為:
1.聲明事件委托;
2.觸發(fā)事件的方法;
3.實(shí)例化事件委托(給委托添加引用方法)msdn2005中是這樣解釋的:
委托具有以下特點(diǎn):委托類似于C++函數(shù)指針,但它是類型安全的。委托允許將方法作為參數(shù)進(jìn)展傳遞。委托可用于定義回調(diào)方法。委托可以鏈接在一起;例如,可以對一個(gè)事件調(diào)用多個(gè)方法。方法不需要與委托簽名準(zhǔn)確匹配。有關(guān)更多信息,請參見協(xié)變和逆變。C#2.0版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。委托適用于那種在某些其他語言中需用函數(shù)指針來解決的情況〔場合〕。但是,與函數(shù)指針不同,委托是面向?qū)ο蠛皖愋桶踩?。委托聲明定義一個(gè)類,它是從System.Delegate類派生的類。委托實(shí)例封裝了一個(gè)調(diào)用列表,該列表列出了一個(gè)或多個(gè)方法,每個(gè)方法稱為一個(gè)可調(diào)用實(shí)體。對于實(shí)例方法,可調(diào)用實(shí)體由一個(gè)實(shí)例和該實(shí)例的方法組成。對于靜態(tài)方法,可調(diào)用實(shí)體僅由一個(gè)方法組成。如果用一組適宜的參數(shù)來調(diào)用一個(gè)委托實(shí)例,則該委托實(shí)例所封裝的每個(gè)可調(diào)用實(shí)體都會被調(diào)用,并且用的都是上述的同一組參數(shù)。委托實(shí)例的一個(gè)有趣且有用的屬性是:它既不知道也不關(guān)心有關(guān)它所封裝的方法所屬的類的種種詳情;對它來說最重要的是這些方法與該委托的類型兼容〔第15.1節(jié)〕。這使委托非常適合“匿名〞調(diào)用。這是一個(gè)強(qiáng)大的功能。定義和使用委托分三個(gè)步驟:聲明、實(shí)例化和調(diào)用。8.C#中的接口和類有什么異同。一個(gè)接口定義一個(gè)協(xié)定。實(shí)現(xiàn)接口的類或構(gòu)造必須遵守其協(xié)定。接口可以包含方法、屬性、索引器和事件作為成員。接口是負(fù)責(zé)功能的定義,工程中通過接口來標(biāo)準(zhǔn)類,操作類以及抽象類的概念!而類是負(fù)責(zé)功能的具體實(shí)現(xiàn)!在類中也有抽象類的定義,抽象類與接口的區(qū)別在于:抽象類是一個(gè)不完全的類,類里面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進(jìn)一步的專業(yè)化。但接口是一個(gè)行為的標(biāo)準(zhǔn),里面的所有東西都是抽象的!一個(gè)類只可以繼承一個(gè)基類也就是父類,但可以實(shí)現(xiàn)多個(gè)接口PS:接口除了標(biāo)準(zhǔn)一個(gè)行為之外,在具體工程中的實(shí)際作用也是十分重要的,在面向?qū)ο蟮脑O(shè)計(jì)原則以及設(shè)計(jì)模式的使用中,無不表達(dá)作為一個(gè)接口的使用好處,最直接的就是設(shè)計(jì)原則中OCP〔開放封閉原則〕,我們使用接口,而不需要關(guān)心他的具體實(shí)現(xiàn),具體實(shí)現(xiàn)的細(xì)節(jié)變化也無關(guān)客戶端〔使用接口的類〕的使用,對與擴(kuò)展是開放的,我們可以另寫一個(gè)接口的實(shí)現(xiàn)來擴(kuò)展當(dāng)前程序,而不影響上層的使用,但對修改是封閉的,即我們不能夠再去修改接口的定義,當(dāng)然這個(gè)“不能夠〞是指在標(biāo)準(zhǔn)原則上不應(yīng)該這么做!9.。net中讀寫數(shù)據(jù)庫需要用到哪些類他們的作用10.UDP連接和TCP連接的異同。11.ASP.net的身份驗(yàn)證方式有哪些分別是什么原理12.進(jìn)程和線程分別若何理解簡單的說,你每啟動(dòng)一個(gè)程序,就啟動(dòng)了一個(gè)進(jìn)程。在Windows3.x下,進(jìn)程是最小運(yùn)行單位。在Windows95/NT下,每個(gè)進(jìn)程還可以啟動(dòng)幾個(gè)線程,比方每下載一個(gè)文件可以單獨(dú)開一個(gè)線程。在Windows95/NT下,線程是最小單位。WINDOWS的多任務(wù)特性使得線程之間獨(dú)立運(yùn)行,但是它們彼此共享虛擬空間,也就是共用變量,線程有可能會同時(shí)操作一片內(nèi)存。線程與進(jìn)程的區(qū)別多線程共存于應(yīng)用程序中是現(xiàn)代操作系統(tǒng)中的基本特征和重要標(biāo)志。用過UNIX操作系統(tǒng)的讀者知道進(jìn)程,在UNIX操作系統(tǒng)中,每個(gè)應(yīng)用程序的執(zhí)行都在操作系統(tǒng)內(nèi)核中登記一個(gè)進(jìn)程標(biāo)志,操作系統(tǒng)根據(jù)分配的標(biāo)志對應(yīng)用程序的執(zhí)行進(jìn)展調(diào)度和系統(tǒng)資源分配,但進(jìn)程和線程有什么區(qū)別呢進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于:線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性搞。另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口13.什么是code-Behind技術(shù)。14.活動(dòng)目錄的作用。15..net中讀寫XML的類都?xì)w屬于哪些命名空間16.解釋一下UDDI、WSDL的意義及其作用。17.什么是SOAP,有哪些應(yīng)用。答:SOAP〔SimpleObjectAccessProtocol〕簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過程調(diào)用的協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議〔最常用的還是協(xié)議〕,可以允許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。這種相互通信采用的是XML格式的消息,具體請看:://playist.blogchina/2521621.html18.若何部署一個(gè)ASP.net頁面。19.若何理解.net中的垃圾回收機(jī)制。20.常用的調(diào)用webservice方法有哪些21.Virtual與abstraction區(qū)別?22.構(gòu)造與類有何差異?哪些時(shí)候?qū)Ρ冗m合使用構(gòu)造和類?它們的一樣之處:1,兩者都是Container類型,這表示它們可以包含其他數(shù)據(jù)類型作為成員.2,兩者都擁有成員,這些成員包括:構(gòu)造函數(shù),方法,屬性,字段,常量,枚舉類型,事件,以及事件處理函數(shù).3,兩者的成員都有其各自的存取范圍.例如,您可以將某一個(gè)成員聲明為Public,而將另外一人成員聲明為Private4,兩者都可以實(shí)現(xiàn)接口.5,兩者都可以公開一個(gè)默認(rèn)屬性,然而前提是這個(gè)屬性至少要取得一個(gè)自變量.6,兩者都可以聲明和觸發(fā)事件,而且兩者都可以聲明委托(Delegate).7,構(gòu)造與類都可以完全是空的.它們的不同之處如下:1,構(gòu)造是實(shí)值類型(ValueTypes),而類是引用類型(ReferenceTypes).2,構(gòu)造使用載存儲(StackAllocation),而類使用堆存儲(HeapAllocation).3,所有構(gòu)造成員默認(rèn)都是Public,而類的變量與常量數(shù)則默認(rèn)為(Private,不過其他類成員默認(rèn)都是Public.4,構(gòu)造成員國不能被聲明為Protected,但是類成員可以這樣做.5,構(gòu)造變量聲明不能指定初始值,使用new關(guān)鍵字詞或?qū)?shù)組進(jìn)展初始化,但類變量聲明則可以這樣做.6,構(gòu)造不能聲明默認(rèn)的構(gòu)造函數(shù),也就是不擁有參數(shù)的非共享構(gòu)造函數(shù),但是類則無此限制.7,二者都可以擁有共享構(gòu)造函數(shù),構(gòu)造的共享構(gòu)造函數(shù)不能帶有參數(shù),但類的共享構(gòu)造函數(shù)則可以帶或者不帶參數(shù).8,構(gòu)造不允許聲明析構(gòu)函數(shù)(Destructor),類則無此限制.9,構(gòu)造的實(shí)例(Instance)聲明,不允許對包含的變量進(jìn)展初始化設(shè)定,類則可以在聲明類的實(shí)例時(shí),同時(shí)進(jìn)展變量初始化.10,構(gòu)造是隱式繼承自ValueType類而且不能繼承任何其它的類型,類則可以繼承來自ValueType以外的任何類.11,構(gòu)造是無法被繼承的,類則可以被繼承.12,構(gòu)造永遠(yuǎn)不會終止,因此CommonLanguageRuntime(CLR)不會在任何構(gòu)造上調(diào)用Finalize方法.類則是由內(nèi)存回收進(jìn)程加以終止,當(dāng)內(nèi)存回收進(jìn)程檢測到?jīng)]有任何作用的類時(shí),它就會調(diào)用類的Finalize方法.13,構(gòu)造不需要構(gòu)造函數(shù),類則需要構(gòu)造函數(shù).14,構(gòu)造只能在一種情況下使用非共享構(gòu)造函數(shù),那就是非共享構(gòu)造函數(shù)會接收參數(shù):但是類則無此限制,它可以使用帶參數(shù)或不帶參數(shù)的非共享構(gòu)造函數(shù).15,每一個(gè)構(gòu)造都具有無參數(shù)的隱含公共構(gòu)造函數(shù).此構(gòu)造函數(shù)會將構(gòu)造的所有成員初始化為基默認(rèn)值.您不能重新定義這個(gè)行為.除了上述的相似處與相異點(diǎn)之外,我們還可以在〞實(shí)例與變量〞層面上來探討構(gòu)造與類.由于構(gòu)造是數(shù)值類型的,因此每個(gè)構(gòu)造變量會永久地綁定到構(gòu)造實(shí)例上.然而類是引用類型的,而且對象變量可引用不同的類實(shí)例.在此方面的區(qū)別,會對于使用構(gòu)造與類造成以下影響:1構(gòu)造變量會隱式地使用構(gòu)造的無參數(shù)構(gòu)造函數(shù)來初始化成員,這就意味著,語句StructlS就等于StructlS=newStructl();2當(dāng)您好將一個(gè)構(gòu)造變量賦值給另一個(gè),或是將構(gòu)造實(shí)例傳遞到程序變量時(shí),所有變量成員的值會復(fù)制到新的構(gòu)造中.當(dāng)您將一個(gè)對象變量賦值給另一個(gè),或是將對象變量傳遞到程序時(shí),則只會復(fù)制指針.3,您可以將Null值賦值給構(gòu)造變量,但是該實(shí)例會一直與該變量保持關(guān)聯(lián).雖然變量成員會因此賦值而重新初始化,但是您還是可以調(diào)用變量的方法并訪問其數(shù)據(jù)成員.相反地,如果您將對象變量設(shè)定為Null,您就會中斷它與任何類實(shí)例的關(guān)聯(lián),而且除非您再將另外一個(gè)實(shí)例賦值給它,否則無法通過變量訪問任何成員.4,您可以在不同時(shí)間將不同的類的實(shí)例賦值給同一個(gè)對象變量,而且在同一時(shí)間可以有好幾個(gè)對象變量引用一樣的類實(shí)例,如果您對類成員值做了改變,則其它指向一樣實(shí)例的對象變量也會發(fā)生改變.然而,構(gòu)造成員則會封裝在它們自己的實(shí)例中,變更構(gòu)造成員值并不會對其它任何構(gòu)造變量的成員造成影響,甚至也不會影響一樣Struct聲明的其它實(shí)例.5,兩個(gè)構(gòu)造必須以成員對成員的對比方式來執(zhí)行相等對比.兩個(gè)對象變量可以使用Equals方法來加以對比.Equals會判斷兩個(gè)變量是否指向一樣的實(shí)例.在以下狀況中,對比適合使用構(gòu)造1,您擁有少量數(shù)據(jù)而且希望使用會傳遞的方式來為變量賦值時(shí).2您會在每一個(gè)實(shí)例上執(zhí)行大量的操作,而且假設(shè)使用堆來管理會造成性能下降.3,您不需要進(jìn)展繼承,而且不需要實(shí)例有特殊性.4,您不會采用Boxing與Unboxing構(gòu)造.5,您會在Managed與UnManaged程序代碼之間傳遞Blittable數(shù)據(jù).在以下情況中,對比適合使用類:1,您需要使用繼承與多態(tài).2,您需要在創(chuàng)立階段初始化一個(gè)或多個(gè)成員.3,您需要提供一個(gè)非參數(shù)型的構(gòu)造函數(shù).4,您需要沒有任何限制的事件處理支持.23.談?wù)勀銓ΧS樹的理解?24.若何把一個(gè)array復(fù)制到arrayList里foreach(objectoinarray)arrayList.Add(o);25.datagrid.datasouse可以連接什么數(shù)據(jù)源[dataset,datatable,dataview]dataset,datatable,dataview,IList26.概述反射和序列化反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動(dòng)態(tài)地創(chuàng)立類型的實(shí)例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型。然后,可以調(diào)用類型的方法或訪問其字段和屬性序列化:序列化是將對象轉(zhuǎn)換為容易傳輸?shù)母袷降倪^程。例如,可以序列化一個(gè)對象,然后使用通過Internet在客戶端和服務(wù)器之間傳輸該對象。在另一端,反序列化將從該流重新構(gòu)造對象。27.概述o/rmapping的原理利用反射,配置將類于數(shù)據(jù)庫表映射28.類成員有()種可訪問形式可訪問形式不懂??稍L問性:public,protected,private,internal29.用sealed修飾的類有什么特點(diǎn)sealed修飾符用于防止從所修飾的類派生出其它類。如果一個(gè)密封類被指定為其他類的基類,則會發(fā)生編譯時(shí)錯(cuò)誤。密封類不能同時(shí)為抽象類。sealed修飾符主要用于防止非有意的派生,但是它還能促使某些運(yùn)行時(shí)優(yōu)化。具體說來,由于密封類永遠(yuǎn)不會有任何派生類,所以對密封類的實(shí)例的虛擬函數(shù)成員的調(diào)用可以轉(zhuǎn)換為非虛擬調(diào)用來處理。30.C#中,stringstr=null與stringstr="",請盡量用文字說明區(qū)別。(要點(diǎn):說明詳細(xì)的內(nèi)存空間分配)31.概述三層構(gòu)造體系32.若何實(shí)現(xiàn)MVC模式,舉例說明!33.。net中讀寫數(shù)據(jù)庫需要用到哪些類他們的作用34.ASP.net的身份驗(yàn)證方式有哪些分別是什么原理35..netRemoting與webservices區(qū)別?36.C#可否對內(nèi)存進(jìn)展直接的操作37:您在什么情況下會用到虛方法它與接口有什么不同38:Override與重載有什么區(qū)別39:值類型與引用類型有什么區(qū)別40:若何理解靜態(tài)變量41:向服務(wù)器發(fā)送請求有幾種方式42:DataReader與DataSet有什么區(qū)別43:如果在一個(gè)B/S構(gòu)造的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進(jìn)展處理使用Server.Transfer這個(gè)方法相比上面介紹的方法稍微復(fù)雜一點(diǎn),但在頁面間值傳遞中卻是特別有用的,使用該方法你可以在另一個(gè)頁面以對象屬性的方式來存取顯露的值,當(dāng)然了,使用這種方法,你需要額外寫一些代碼以創(chuàng)立一些屬性以便可以在另一個(gè)頁面訪問它,但是,這個(gè)方式帶來的好處也是顯而易見的??傮w來說,使用這種方法是簡潔的同時(shí)又是面向?qū)ο蟮?。使用這種方法的整個(gè)過程如下:1,在頁面里添加必要的控件2,創(chuàng)立返回值的Get屬性過程3,創(chuàng)立可以返回表單的按鈕和鏈接按鈕4,在按鈕單擊事件處理程序中調(diào)用Server.Transfer方法轉(zhuǎn)移到指定的頁面5,在第二個(gè)頁面中,我們就可以使用Context.Handler屬性來獲得前一個(gè)頁面實(shí)例對象的引用,通過它,就可以使用存取前一個(gè)頁面的控件的值了以下代碼綜合實(shí)現(xiàn)上述步驟過程的代碼:源頁面代碼:把以下的代碼添加到頁面中publicstringName{get{returnTextBox1.Text;}}publicstringEMail{get{returnTextBox2.Text;}}然后調(diào)用Server.Transfer方法privatevoidButton1_Click(objectsender,System.EventArgse){Server.Transfer("anotherwebform.aspx";}目標(biāo)頁面代碼:privatevoidPage_Load(objectsender,System.EventArgse){//createinstanceofsourcewebformWebForm1wf1;//getreferencetocurrenthandlerinstancewf1=(WebForm1)Context.Handler;Label1.Text=wf1.Name;Label2.Text=wf1.EMail;}在ASP.NET2.0中啟用了跨頁面?zhèn)魉凸δ埽涔δ芎陀梅ㄔ谝院笤谧鼋榻B!頁面之間傳遞值方式1:在接收頁的html代碼里加上一行:<%@ReferencePage="WebForm1.aspx"%>WebForm1fp=(WebForm1)Context.Handler;this.TextBox1.Text=;//name是第一頁的public變量Context提供對整個(gè)當(dāng)前上下文〔包括請求對象〕的訪問。您可以使用此類共享頁之間的信息。方式2:GET方式在發(fā)送頁publicintsum=0;inti=int.Parse(this.TextBox1.Text)*2;Server.Transfer("WebForm2.aspx?sum="+i);接收頁this.TextBox1.Text=Request["sum"].ToString();orthis.TextBox1.Text=Request.Params["sum"].ToString();this.TextBox1.Text=Request.QueryString["sum"];方法3:全局變量發(fā)送頁:Application["sum"]=this.TextBox1.Text;Server.Transfer("WebForm2.aspx";接收頁:this.TextBox1.Text=(string)Application["sum"];Application實(shí)質(zhì)上是整個(gè)虛擬目錄中所有文件的集合,如果想在整個(gè)應(yīng)用范圍內(nèi)使用某個(gè)變量值,Application對象將是最正確的選擇在這里用Session[""]的方法雷同方法4:發(fā)送頁:1.定義靜態(tài)變量:publicstaticstringstr="";2.str=this.TextBox1.Text;Server.Transfer("webform2.aspx";接收頁:1.引入第一頁的命名空間:usingWebApplication1;2this.TextBox1.Text=WebForm1.str;44:軟件開發(fā)過程一般有幾個(gè)階段每個(gè)階段的作用45:微軟推出了一系列的ApplicationBlock,請舉出您所知道的ApplicationBlock并說明其作用46:請列舉一些您用到過的設(shè)計(jì)模式以及在什么情況下使用該模式47:您對WebService的體會以下幾道題目如果您不會,請較為詳細(xì)的描述您的解決思路和方法48:通過超鏈接若何傳遞中文參數(shù)49:請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty50:請編程實(shí)現(xiàn)一個(gè)冒泡排序算法51.下面這段代碼輸出什么為什么inti=5;intj=5;if(Object.ReferenceEquals(i,j))Console.WriteLine("Equal");elseConsole.WriteLine("NotEqual");52.對于這樣的一個(gè)枚舉類型:enumColor:byte{Red,Green,Blue,Orange}string[]ss=Enum.GetNames(typeof(Color));byte[]bb=Enum.GetValues(typeof(Color));試寫一段程序顯示出枚舉類型中定義的所有符號名稱以及它們對應(yīng)的數(shù)值。53.一個(gè)長度為10000的字符串,通過隨機(jī)從a-z中抽取10000個(gè)字符組成。請用c#語言編寫主要程序來實(shí)現(xiàn)。54.在c#中using和new這兩個(gè)關(guān)鍵字有什么意義,請寫出你所知道的意義using指令和語句new創(chuàng)立實(shí)例new隱藏基類中方法55下面這段代碼有錯(cuò)誤么switch(i){case():CaseZero();break;case1:CaseOne();break;case2:dufault;//wrongCaseTwo();break;}56當(dāng)類T只聲明了私有實(shí)例構(gòu)造函數(shù)時(shí),則在T的程序文本外部,___可以___〔可以or不可以〕從T派生出新的類,不可以____〔可以or不可以〕直接創(chuàng)立T的任何實(shí)例。12.下面的代碼中有什么錯(cuò)誤嗎_______usingSystem;classA{publicvirtualvoidF(){Console.WriteLine("A.F");}}abstractclassB:A{publicabstractoverridevoidF();//newpublicabstractvoidF();}1.c#中的三元運(yùn)算符是__?:___?2.當(dāng)整數(shù)a賦值給一個(gè)object對象時(shí),整數(shù)a將會被__裝箱(封裝)___?3.類成員有_____種可訪問形式this.;newClass().Method;4.publicstaticconstintA=1;這段代碼有錯(cuò)誤么是什么const不能用static修飾5.floatf=-123.567F;inti=(int)f;i的值現(xiàn)在是_____?1236.利用operator聲明且僅聲明了“==〞,有什么錯(cuò)誤么?7.委托聲明的關(guān)鍵字是______?delagete8.用sealed修飾的類有什么特點(diǎn)密封,不能繼承9.在A中所有的自定義用戶控件都必須繼承自________?Control10.在.Net中所有可序列化的類都被標(biāo)記為_____?11.在.Net托管代碼中我們不用擔(dān)憂內(nèi)存漏洞,這是因?yàn)橛辛薩_____?gc1.有哪幾種方法可以實(shí)現(xiàn)一個(gè)類存取另外一個(gè)類的成員函數(shù)及屬性,并請舉列來加以說明和分析.2.如果需記錄類的實(shí)例個(gè)數(shù),該若何實(shí)現(xiàn),請寫一個(gè)簡單的類于以證明.3.A類是B類的基類,并且都有自己的構(gòu)造,析構(gòu)函數(shù),請舉例證明B類從實(shí)例化到消亡過程中構(gòu)造,析構(gòu)函數(shù)的執(zhí)行過程.4.需要實(shí)現(xiàn)對一個(gè)字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保存一個(gè)空格,即允許字符串中間有多個(gè)空格,但連續(xù)的空格數(shù)不可超過一個(gè).2、.net的錯(cuò)誤處理機(jī)制是什么數(shù)據(jù)庫方面:1.存儲過程和函數(shù)的區(qū)別2.事務(wù)是什么3.游標(biāo)的作用若何知道游標(biāo)已經(jīng)到了最后4.觸發(fā)器分為事前觸發(fā)和事后觸發(fā),這兩種觸發(fā)有和區(qū)別。語句級觸發(fā)和行級觸發(fā)有何區(qū)別。1。用C#實(shí)現(xiàn)以下功能a產(chǎn)生一個(gè)int數(shù)組,長度為100,并向其中隨機(jī)插入1-100,并且不能重復(fù)。int[]intArr=newint[100];ArrayListmyList=newArrayList();Randomrnd=newRandom();while(myList.Count<100){intnum=rnd.Next(1,101);if(!myList.Contains(num))myList.Add(num);}for(inti=0;i<100;i++)intArr[i]=(int)myList[i];b對上面生成的數(shù)組排序,需要支持升序、降序兩種順序2。請說明在.net中常用的幾種頁面間傳遞參數(shù)的方法,并說出他們的優(yōu)缺點(diǎn)。session(viewstate)簡單,但易喪失application全局cookie簡單,但可能不支持,可能被偽造inputttype="hidden"簡單,可能被偽造url參數(shù)簡單,顯示于地址欄,長度有限數(shù)據(jù)庫穩(wěn)定,安全,但性能相對弱3。請說明.net中的錯(cuò)誤處理機(jī)制,并舉例trycatchfinal4。請說出強(qiáng)名的含義具有自己的key,可以在GAC(全局程序集緩存)為公用5。請列出c#中幾種循環(huán)的方法,并指出他們的不同forwileforeach6。請指出.net中所有類型的基類object7。請指出GAC的含義8。SQLSREVER中,向一個(gè)表中插入了新數(shù)據(jù),若何快捷的得到自增量字段的當(dāng)前值試卷1.填空:(1)面向?qū)ο蟮恼Z言具有________性、_________性、________性。(2)能用foreach遍歷訪問的對象需要實(shí)現(xiàn)________________接口或聲明________________方法的類型。(3)列舉ADO.net中的五個(gè)主要對象_______________、_____________、_______________、_______________、_________________。Connection,Command,DataReader,DataAdapter,DataSetconnection連接對象
command命令對象,指示要執(zhí)行的命令和存儲過程!
datareader是一個(gè)向前的只讀的數(shù)據(jù)流。
dataadapter是功能強(qiáng)大的適陪器,支持增刪改查的功能
dataset是一個(gè)數(shù)據(jù)級對象,相當(dāng)與內(nèi)存中的一張表或多張表!2.不定項(xiàng)選擇:(1)以下表達(dá)正確的選項(xiàng)是:A.接口中可以有虛方法。B.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。C.接口不能被實(shí)例化。D.接口中可以包含已實(shí)現(xiàn)的方法。(2)從數(shù)據(jù)庫讀取記錄,你可能用到的方法有:A.ExecuteNonQueryB.ExecuteScalarC.FillD.ExecuteReader3.簡述private、protected、public、internal修飾符的訪問權(quán)限。4.寫出一條Sql語句:取出表A中第31到第40記錄〔SQLServer,以自動(dòng)增長的ID作為主鍵,注意:ID可能不是連續(xù)的?!?.列舉ASP.NET頁面之間傳遞值的幾種方式。6.寫出程序的輸出結(jié)果classClass1{privatestringstr="Class1.str";privateinti=0;staticvoidStringConvert(stringstr){str="stringbeingconverted.";}staticvoidStringConvert(Class1c){c.str="stringbeingconverted.";}staticvoidAdd(inti){i++;}staticvoidAddWithRef(refinti){i++;}staticvoidMain(){inti1=10;inti2=20;stringstr="str";Class1c=newClass1();Add(i1);AddWithRef(refi2);Add(c.i);StringConvert(str);StringConvert(c);Console.WriteLine(i1);Console.WriteLine(i2);Console.WriteLine(c.i);Console.WriteLine(str);Console.WriteLine(c.str);}}7.寫出程序的輸出結(jié)果publicabstractclassA{publicA(){Console.WriteLine('A');}publicvirtualvoidFun(){Console.WriteLine("A.Fun()");}}publicclassB:A{publicB(){Console.WriteLine('B');}publicnewvoidFun(){Console.WriteLine("B.Fun()");}publicstaticvoidMain(){Aa=newB();a.Fun();}}8.寫出程序的輸出結(jié)果:publicclassA{publicvirtualvoidFun1(inti){Console.WriteLine(i);}publicvoidFun2(Aa){a.Fun1(1);Fun1(5);}}publicclassB:A{publicoverridevoidFun1(inti){base.Fun1(i+1);}publicstaticvoidMain(){Bb=newB();Aa=newA();a.Fun2(b);b.Fun2(a);}}9.一列數(shù)的規(guī)則如下:1、1、2、3、5、8、13、21、34求第30位數(shù)是多少,用遞歸算法實(shí)現(xiàn)。(C#語言)10.程序設(shè)計(jì):貓大叫一聲,所有的老鼠都開場逃跑,主人被驚醒。(C#語言)要求:1.要有聯(lián)動(dòng)性,老鼠和主人的行為是被動(dòng)的。2.考慮可擴(kuò)展性,貓的叫聲可能引起其他聯(lián)動(dòng)效應(yīng)。參考答案:1.(1)繼承性、封裝性、多態(tài)性。〔考基本概念〕(2)IEnumerable、GetEnumerator(對foreach機(jī)制的理解,本來不想出這題的,湊分)(3)...(送分題,對ADO.net的了解)評分標(biāo)準(zhǔn):一空1分,總分值10分。2.(1)B、C(考對接口的理解)(2)B、C、D(考察對ADO.net的熟練程度)評分標(biāo)準(zhǔn):一題5分,不選或者錯(cuò)選均不得分。漏選得2分??偡种?0分。3..private:私有成員,在類的內(nèi)部才可以訪問。protected:保護(hù)成員,該類內(nèi)部和繼承類中可以訪問。public:公共成員,完全公開,沒有訪問限制。internal:在同一命名空間內(nèi)可以訪問。評分標(biāo)準(zhǔn):答對1題2分,2題5分,3題7分。全對10分。(送分題)4.解1:selecttop10*fromAwhereidnotin(selecttop30idfromA)解2:selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)評分標(biāo)準(zhǔn):寫對即10分。(答案不唯一,datagrid分頁可能需要用到)5.1.使用QueryString,如?id=1;response.Redirect()2.使用Session變量3.使用Server.Transfer等等評分標(biāo)準(zhǔn):答對1點(diǎn)得3分,兩點(diǎn)7分,3點(diǎn)10分。6.(考察值引用和對象引用)10210strstringbeingconverted.評分標(biāo)準(zhǔn):答對一點(diǎn)得2分,總分值10分。7.ABA.Fun()評分標(biāo)準(zhǔn):寫出A.B得5分,寫出A.Fun()得5分,總分值10分。(考察在繼承類中構(gòu)造函數(shù),以及new方法,)8.2516評分標(biāo)準(zhǔn):答對一點(diǎn)得2分,兩點(diǎn)得5分,3點(diǎn)得7分。全對得10分。(一些人做這題,頭都暈了^_^)9.publicclassMainClass{publicstaticvoidMain(){Console.WriteLine(Foo(30));}publicstaticintFoo(inti){if(i<=0)return0;elseif(i>0&&i<=2)return1;elsereturnFoo(i-1)+Foo(i-2);}}評分標(biāo)準(zhǔn):寫出returnFoo(i-1)+Foo(i-2);得5分。寫出if(i>0&&i<=2)return1;得5分。方法參數(shù)過多需要扣分〔扣除分?jǐn)?shù)=參數(shù)個(gè)數(shù)-1〕不用遞歸算法扣5分(遞歸算法在樹構(gòu)造建設(shè)等方面對比常用)10要點(diǎn):1.聯(lián)動(dòng)效果,運(yùn)行代碼只要執(zhí)行Cat.Cryed()方法。2.對老鼠和主人進(jìn)展抽象評分標(biāo)準(zhǔn):<1>.構(gòu)造出Cat、Mouse、Master三個(gè)類,并能使程序運(yùn)行(2分)<2>從Mouse和Master中提取抽象〔5分〕<3>聯(lián)動(dòng)效應(yīng),只要執(zhí)行Cat.Cryed()就可以使老鼠逃跑,主人驚醒。(3分)publicinterfaceObserver{voidResponse();//觀察者的響應(yīng),如是老鼠見到貓的反映}publicinterfaceSubject{voidAimAt(Observerobs);//針對哪些觀察者,這里指貓的要撲捉的對象老鼠}publicclassMouse:Observer{privatestringname;publicMouse(stringname,Subjectsubj){=name;subj.AimAt(this);}publicvoidResponse(){Console.WriteLine(name+"attempttoescape!");}}publicclassMaster:Observer{publicMaster(Subjectsubj){subj.AimAt(this);}publicvoidResponse(){Console.WriteLine("Hostwaken!");}}publicclassCat:Subject{privateArrayListobservers;publicCat(){this.observers=newArrayList();}publicvoidAimAt(Observerobs){this.observers.Add(obs);}publicvoidCry(){Console.WriteLine("Catcryed!");foreach(Observerobsinthis.observers){obs.Response();}}}classMainClass{staticvoidMain(string[]args){Catcat=newCat();Mousemouse1=newMouse("mouse1",cat);Mousemouse2=newMouse("mouse2",cat);Mastermaster=newMaster(cat);cat.Cry();}}//設(shè)計(jì)方法二:使用event--delegate設(shè)計(jì)..publicdelegatevoidSubEventHandler();publicabstractclassSubject{publiceventSubEventHandlerSubEvent;protectedvoidFireAway(){if(this.SubEvent!=null)this.SubEvent();}}publicclassCat:Subject{publicvoidCry(){Console.WriteLine("catcryed.");this.FireAway();}}publicabstractclassObserver{publicObserver(Subjectsub){sub.SubEvent+=newSubEventHandler(Response);}publicabstractvoidResponse();}publicclassMouse:Observer{privatestringname;publicMouse(stringname,Subjectsub):base(sub){=name;}publicoverridevoidResponse(){Console.WriteLine(name+"attempttoescape!");}}publicclassMaster:Observer{publicMaster(Subjectsub):base(sub){}publicoverridevoidResponse(){Console.WriteLine("hostwaken");}}classClass1{staticvoidMain(string[]args){Catcat=newCat();Mousemouse1=newMouse("mouse1",cat);Mousemouse2=newMouse("mouse2",cat);Mastermaster=newM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來十年移動(dòng)支付的科技發(fā)展趨勢預(yù)測
- 標(biāo)準(zhǔn)化管理在生產(chǎn)現(xiàn)場的挑戰(zhàn)與對策
- 現(xiàn)代音樂文化的全球化傳播路徑
- 13人物描寫一組(說課稿)2023-2024學(xué)年統(tǒng)編版語文五年級下冊
- Unit 1 Playtime Lesson 3(說課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語二年級下冊001
- 25 少年閏土 第二課時(shí) 說課稿-2024-2025學(xué)年語文六年級上冊 統(tǒng)編版
- Unit1 London is a big city(說課稿)2023-2024學(xué)年外研版(三起)四年級下冊
- 2024-2025學(xué)年高中生物 第七章 現(xiàn)代生物進(jìn)化理論 第1節(jié) 現(xiàn)代生物進(jìn)化理論的由來說課稿3 新人教版必修2
- Unit 2 Being a good language learner Exploring and Using 說課稿-2024-2025學(xué)年高中英語重大版(2019)必修第一冊
- 2025挖掘機(jī)勞動(dòng)合同范文
- 北師大版五年級上冊四則混合運(yùn)算100道及答案
- 專項(xiàng)債券在燃?xì)饣A(chǔ)設(shè)施建設(shè)中的融資作用
- 人教部編版道德與法治八年級下冊:6.3 《國家行政機(jī)關(guān)》說課稿1
- GE-LM2500+G4航改燃?xì)廨啓C(jī)在艦船和工業(yè)上的應(yīng)用
- 2024山東能源集團(tuán)中級人才庫選拔(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- 鋼鐵是怎樣煉成的讀后感作文700字
- 武漢市江夏區(qū)2022-2023學(xué)年七年級上學(xué)期期末數(shù)學(xué)試卷【帶答案】-109
- 學(xué)校物業(yè)服務(wù)合同范本專業(yè)版
- SL 288-2014 水利工程施工監(jiān)理規(guī)范
- 部編版八年級語文上冊期末考試卷
- 2024年02月中央軍委后勤保障部2024年公開招考專業(yè)技能崗位文職人員筆試參考題庫附帶答案詳解
評論
0/150
提交評論