|
下文是125個(gè)基本的C#面試問(wèn)答清單。這些面試問(wèn)題簡(jiǎn)單、直接了當(dāng),涵蓋了C#最基本的概念,大部分和面向?qū)ο蟮母拍钕嚓P(guān)。所以如果你在準(zhǔn)備C#面試,我建議你必須掌握這125個(gè)基本的C#面試問(wèn)答來(lái)復(fù)習(xí)你的C#概念。那么現(xiàn)在來(lái)看看這125個(gè)基本的C#面試問(wèn)答清單吧。 1. 什么是C#? C#(發(fā)音”C sharp”)是一種簡(jiǎn)單、有別于傳統(tǒng)的、面向?qū)ο?、類型安全的編程語(yǔ)言。C和C++程序員很快就會(huì)熟悉它。C#中結(jié)合了高生產(chǎn)率的快速應(yīng)用開(kāi)發(fā)(RAD)語(yǔ)言。 2. C#的有哪些注釋類型? C#中有三種注釋類型。 3. C#.NET中使用的命名空間有哪些? 命名空間是類型的邏輯分組。 4. C#有哪些特點(diǎn)? C#有以下特點(diǎn): 簡(jiǎn)單 5. 繼承有哪些不同的類別? 在面向?qū)ο缶幊讨欣^承的四種類型: 單繼承:包括一個(gè)基類和一個(gè)派生類。 多層繼承(Hierarchical inheritance) :包括一個(gè)基類和繼承自同一個(gè)基類的派生類。 多級(jí)繼承(Multilevel inheritance):包括從一個(gè)派生類派生出來(lái)的類。 多重繼承(Multiple inheritance):包括多個(gè)基類和一個(gè)派生類。 6. 面向?qū)ο缶幊痰幕靖拍钍鞘裁矗?/strong> 有必要理解一些在面向?qū)ο缶幊讨袕V泛使用的概念。它們包括: 對(duì)象 7. 你可以繼承多個(gè)接口嗎? 可以的。在C#中可能繼承多個(gè)接口。 8. 什么是繼承? 繼承是從一個(gè)已經(jīng)存在的類中派生出來(lái)的新類。 9. Define scope?定義作用域? 作用域指的是代碼中一個(gè)變量可以被訪問(wèn)的區(qū)域。 10. public、static和void之間的區(qū)別是什么? public:關(guān)鍵字public是訪問(wèn)修飾符,用來(lái)告訴C#編譯器主(Main)方法可以被任何人調(diào)用。 static:關(guān)鍵字static表明主(Main)方法是一個(gè)全局方法,不需要穿件類實(shí)例即可訪問(wèn)。編譯器儲(chǔ)存該方法的地址作為切入點(diǎn),并利用這個(gè)信息在任何對(duì)象創(chuàng)建之前開(kāi)始執(zhí)行它。 void:關(guān)鍵字void是一個(gè)類型修飾符表明主(Main)方法不返回任何值。 11. C#中的修飾符有哪些? Abstract 12. C#中訪問(wèn)修飾符的種類有哪些? C#中的訪問(wèn)修飾符是: public 13. 什么是裝箱和拆箱? 變量值類型隱式轉(zhuǎn)換為引用類型成為裝箱,例如integer到object的類型轉(zhuǎn)換。 引用類型變量轉(zhuǎn)換回值類型成為拆箱。 14. 對(duì)象是什么? 對(duì)象是類的實(shí)例。對(duì)象的創(chuàng)建使用new操作。一個(gè)類在內(nèi)存中創(chuàng)建一個(gè)對(duì)象,將包含特定對(duì)象的值和行為(或者方法)的信息。 15. C#中有哪些類型的數(shù)組? 一維數(shù)組(Single-Dimensional) 16. 對(duì)象和實(shí)例之間的區(qū)別是什么? 用戶定義的類型的實(shí)例稱為一個(gè)對(duì)象。我們可以從一個(gè)類實(shí)例化很多對(duì)象。 對(duì)象是類的實(shí)例。 17. Define destructors?定義析構(gòu)函數(shù)? 當(dāng)類對(duì)象超出作用域或者被明確刪除的時(shí)候,析構(gòu)函數(shù)被調(diào)用。析構(gòu)函數(shù),顧名思義是用來(lái)銷毀由構(gòu)造函數(shù)創(chuàng)建的對(duì)象的。正如構(gòu)造函數(shù),析構(gòu)函數(shù)是一個(gè)類成員方法,方法名和類名相同,只是由波浪號(hào)開(kāi)頭。 18. 枚舉數(shù)據(jù)類型怎么用? 枚舉類型是另一種用戶定義類型,它提供了一種連接名字為數(shù)字的方式,從而提高了代碼的可理解性。enum關(guān)鍵字自動(dòng)地枚舉一組詞,賦予它們的值為0,1,2并以此類推。 19. 定義構(gòu)造函數(shù)? 構(gòu)造函數(shù)是和它的類同名的成員方法。每當(dāng)創(chuàng)建其關(guān)聯(lián)的類的對(duì)象時(shí)構(gòu)造函數(shù)都會(huì)被調(diào)用。它之所以被稱為構(gòu)造函數(shù)是因?yàn)樗鼧?gòu)造了類的數(shù)據(jù)成員的值。 20. 什么是封裝? 包裝數(shù)據(jù)和功能成為一個(gè)單元(稱為類)就被稱為封裝。封裝包含并且隱藏對(duì)象信息,例如內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼。 21. C#支持多重繼承嗎? 不支持,它不可能。支持多級(jí)繼承。 22. 什么是ENUM? Enum用于定義常量。 23. 數(shù)據(jù)集是什么? 數(shù)據(jù)集(DataSet)是從任何數(shù)據(jù)源載入數(shù)據(jù)的內(nèi)存表示。 24. private和public關(guān)鍵字的區(qū)別是什么? Private:關(guān)鍵字private是默認(rèn)訪問(wèn)級(jí)別,并且在所有其他訪問(wèn)級(jí)別中是最嚴(yán)格的。它給予一個(gè)類型或者類型成員最小的權(quán)限。私有成員僅僅在聲明其的類體中可以被訪問(wèn)。 Public:關(guān)鍵字public是所有訪問(wèn)級(jí)別中最自由地,沒(méi)有任何訪問(wèn)限制。公共成員的訪問(wèn)不僅可以來(lái)自外部,也可以來(lái)自內(nèi)部,并且可以自由訪問(wèn)定義在類體內(nèi)或者體外的任何成員。 25. 定義多態(tài)性? 多態(tài)性意味著一個(gè)名字,多種形式。它使我們?cè)谝粋€(gè)程序中可以定義一個(gè)以上相同名字的方法。它讓我們重載操作以便這樣的操作可以對(duì)不同的實(shí)例表現(xiàn)不同的行為。 26. 什么是交錯(cuò)數(shù)組? 交錯(cuò)數(shù)組是元素為數(shù)組的數(shù)組。 交錯(cuò)數(shù)組元素的維度和大小可以不同。 交錯(cuò)數(shù)組有時(shí)稱為“數(shù)組的數(shù)組”。 27. 什么是抽象基類? 抽象類是被設(shè)計(jì)為專門用于作為基類的類。抽象類至少還有一個(gè)純虛方法。 28. 方法重寫和方法重載有什么區(qū)別? 當(dāng)重寫一個(gè)方法時(shí),你改變了派生類中方法的行為。重載方法只涉及在類中另一個(gè)同名的方法。 29. ref和out參數(shù)之間的區(qū)別是什么? 傳遞給ref參數(shù)的參數(shù)必須先初始化。與此相比,對(duì)out參數(shù)來(lái)說(shuō),在參數(shù)傳遞給out參數(shù)之前不需要顯示初始化。 30. C#中using語(yǔ)句怎么用? using語(yǔ)句通常是獲取資源,執(zhí)行語(yǔ)句,然后釋放該資源。 31. 什么是序列化? 序列化(Serialization)是將對(duì)象轉(zhuǎn)換為字節(jié)流的過(guò)程。 反序列化(De-serialization)是從字節(jié)流創(chuàng)建對(duì)象這樣相反的過(guò)程。 序列化/反序列化常用于傳遞對(duì)象。 32. 結(jié)構(gòu)和類之間有什么區(qū)別? 結(jié)構(gòu)是值類型,類是引用類型。 結(jié)構(gòu)不能有構(gòu)造函數(shù)和析構(gòu)函數(shù)。 類可以同時(shí)有構(gòu)造函數(shù)和析構(gòu)函數(shù)。 結(jié)構(gòu)不支持繼承,而類支持繼承。 33. 類和接口之間有什么區(qū)別? 類(Class)是對(duì)象的邏輯表示。它是數(shù)據(jù)集合和相關(guān)子過(guò)程的定義。 接口(Interface)也是一個(gè)類,包含沒(méi)有任何方法體定義的方法。類不支持多重繼承,但是接口支持。 34. 什么是委托? 委托是類型安全,面向?qū)ο蟮暮瘮?shù)指針的實(shí)現(xiàn),并且在許多一個(gè)組件需要回調(diào)到使用它的組件這樣的情況下使用。 35. 什么是認(rèn)證與授權(quán)? 認(rèn)證是識(shí)別用戶的過(guò)程。認(rèn)證是以證書(用戶名和密碼)來(lái)識(shí)別/驗(yàn)證用戶。 授權(quán)在認(rèn)證之后執(zhí)行。授權(quán)是一個(gè)基于這些用戶身份授予訪問(wèn)權(quán)限的過(guò)程。 授權(quán)允許用戶對(duì)特定資源的訪問(wèn)。 36. 什么是基類? 類聲明可以通過(guò)類名加一個(gè)冒號(hào)和基類名來(lái)指定基類。省略基類說(shuō)明等同于從object類派生。 37. “this”可以在靜態(tài)方法中用嗎? 不,‘This’不能在靜態(tài)方法中使用。僅僅只有靜態(tài)變量/方法可以在靜態(tài)方法中使用。 38. constants、readonly和static之間的區(qū)別是什么? Constants: 值不能變。 Read-only: 值在類的構(gòu)造函數(shù)中僅僅初始化一次。 Static: 值可以被初始化一次。 39. C#中支持哪些語(yǔ)句類型? C#支持的幾種不同的語(yǔ)句類型是 塊語(yǔ)句 40. 什么是接口類? 它是一個(gè)抽象類,所有公共抽象方法必須要在其繼承類中實(shí)現(xiàn)。 41. 什么是值類型和引用類型? 值類型存儲(chǔ)在堆棧中。 引用類型存儲(chǔ)在托管堆中。 42. 關(guān)鍵字string和System.String類之間有什么區(qū)別? 關(guān)鍵字string是System.String類的別名。所以,System.String和關(guān)鍵字string是一樣的,你可以使用任何你喜歡的命名約定。String類提供了許多方法用于安全創(chuàng)建,操作和比較字符串。 43. C#中提供的兩種數(shù)據(jù)類型是什么? 值類型 44. 有哪些緩存的種類? 有三種類型的緩存: 輸出緩存(Output Caching):存儲(chǔ)asp.net頁(yè)面的應(yīng)答信息。 片段緩存(Fragment Caching):僅緩存/存儲(chǔ)部分頁(yè)面內(nèi)容(用戶控制)。 數(shù)據(jù)緩存(Data Caching):為了性能通過(guò)編程的方式來(lái)緩存對(duì)象。 45. 自定義控件和用戶控件之間的區(qū)別是什么? 自定義控件是編譯后的代碼(Dlls),容易使用,創(chuàng)建困難,可以放在工具箱。拖拉使用的控件。 屬性可以直觀地在設(shè)計(jì)時(shí)指定??梢员欢鄠€(gè)應(yīng)用程序使用(如果共享Dlls),即使是私有的也能拷貝到web應(yīng)用程序的bin目錄,添加引用和使用。通常是用來(lái)為獨(dú)立的消費(fèi)應(yīng)用程序提供公用功能。 用戶控件和ASP的include文件,輕松創(chuàng)建,不能放置在箱中來(lái)拖拉放置它。用戶控件在單個(gè)應(yīng)用程序文件之間共享。 46. 什么是方法? 方法是由對(duì)象或者類執(zhí)行來(lái)實(shí)現(xiàn)計(jì)算或者操作的成員。靜態(tài)方法通過(guò)類訪問(wèn)。實(shí)例方法通過(guò)類的實(shí)例來(lái)訪問(wèn)。 47. 什么是域? 域是類或者類的實(shí)例相關(guān)的變量。 48. 什么是事件? 事件是使一個(gè)類或?qū)ο竽軌蛱峁┩ㄖ某蓡T。事件聲明像域聲明一樣,除了聲明包含event關(guān)鍵字并且類型必須為委托類型。 49.什么是文本和它們的類型? 文本是程序分配給變量的值常量。C#支持的幾種文本類型是 整數(shù)(Integer literals) 50. 值類型和引用類型的區(qū)別是什么? 值類型存儲(chǔ)在堆棧上,是一個(gè)變量的值賦值給另一個(gè)變量。 引用類型存儲(chǔ)在托管堆上,是兩個(gè)引用變量之間的發(fā)生賦值。 51. C#有什么特性? C#是一個(gè)簡(jiǎn)單而強(qiáng)大的編程語(yǔ)言,用于編寫企業(yè)版的應(yīng)用程序。 C#幫助開(kāi)發(fā)者輕易地構(gòu)建網(wǎng)絡(luò)服務(wù),能夠通過(guò)任何語(yǔ)言,任何平臺(tái)來(lái)訪問(wèn)Internet。 C#幫助開(kāi)發(fā)者用更少的代碼完成開(kāi)發(fā),從而在代碼中錯(cuò)誤更少。 C#引入了相當(dāng)大的改進(jìn)和創(chuàng)新,如類型安全,版本控制,事件和垃圾收集這些領(lǐng)域。 52. 錯(cuò)誤的類型是什么? 語(yǔ)法錯(cuò)誤(Syntax error) 53. break和continue語(yǔ)句之間有什么區(qū)別? break語(yǔ)句是用來(lái)終止當(dāng)前封閉循環(huán)或者它所在的條件語(yǔ)句的。我們已經(jīng)使用break語(yǔ)句跳出switch語(yǔ)句。 continue語(yǔ)句是用來(lái)改變執(zhí)行順序的。和break語(yǔ)句那樣跳出循環(huán)相反,continue語(yǔ)句停止當(dāng)前迭代并且只將控制返回到循環(huán)頂部。 54. 定義命名空間? 命名空間被稱為容器,用來(lái)組織分層的.NET類。 55. 什么是代碼組? 代碼組是一組共享安全上下文的套件。 56. C#中什么是密封類? sealed修飾符用來(lái)阻止從一個(gè)類派生。如果一個(gè)密封類被指定為另一個(gè)類的基類時(shí)會(huì)發(fā)生編譯時(shí)錯(cuò)誤。 57. 靜態(tài)方法和實(shí)例方法的區(qū)別是什么? 以static修飾符聲明的方法是靜態(tài)方法。靜態(tài)方法不操作具體的實(shí)例,并且只能被靜態(tài)成員訪問(wèn)。 沒(méi)有以static修飾符聲明的方法是實(shí)例方法。實(shí)例方法操作一個(gè)具體的實(shí)例并且可以被靜態(tài)和實(shí)例成員訪問(wèn)。在其上調(diào)用實(shí)例方法的實(shí)例可以像這樣顯示訪問(wèn)。在靜態(tài)方法中這么調(diào)用是錯(cuò)誤的。 58. C#中有哪些變量的類型? C#中不同的變量類型是: 靜態(tài)變量(static variables) 59. 方法重載是什么意思? 方法重載允許在同一個(gè)類中的多個(gè)方法有相同的名字,只要它們具有獨(dú)特的簽名。當(dāng)編譯一個(gè)重載方法的調(diào)用時(shí),編譯器使用重載決策決定具體調(diào)用的方法。 60. 什么是參數(shù)? 參數(shù)是用來(lái)傳遞值或者變量引用給方法的。方法的參數(shù)從被調(diào)用方法時(shí)指定的參數(shù)得到它們實(shí)際的值。有四種參數(shù):值參數(shù),引用參數(shù),輸出參數(shù)和參數(shù)數(shù)組。 61. C#是面向?qū)ο蟮恼Z(yǔ)言嗎? 是的,C#和傳統(tǒng)的Java及C++一樣是面向?qū)ο蟮恼Z(yǔ)言。 62. Array和Arraylist之間的區(qū)別是什么? 數(shù)組是相同類型的集合。數(shù)組大小在它聲明的時(shí)候就固定了。鏈表和數(shù)組相似,但它沒(méi)有固定的大小。 63. C#中有什么特殊的運(yùn)算符? C#支持一下特殊運(yùn)算符。 is (關(guān)系運(yùn)算符) 64. C#中運(yùn)算符的含義是什么? 運(yùn)算符是界定了對(duì)類實(shí)例應(yīng)用特定的運(yùn)算表達(dá)式內(nèi)涵的成員??梢远x三種類型的運(yùn)算符:一元運(yùn)算符,二元運(yùn)算符和轉(zhuǎn)換運(yùn)算符。所有的運(yùn)算符必須聲明為public和static的。 65. 什么是類型參數(shù)化? 類型參數(shù)化是一個(gè)類型在另一個(gè)值或者類型之上參數(shù)化。 66. 抽象類的特性是什么? 抽象類不能被實(shí)力化,在抽象類上使用new操作符是錯(cuò)誤的。 抽象類允許(但不必要)包含抽象方法和入口。 抽象類不能用scaled修飾符。 67. abstract關(guān)鍵字怎么用? 修飾符abstract是用于類的關(guān)鍵字,以表明這個(gè)類本身不能直接有實(shí)例或者對(duì)象,并且對(duì)于其他類來(lái)說(shuō)它只能是一個(gè)“基類”。 68. goto語(yǔ)句怎么用? goto語(yǔ)句仍然包含在C#語(yǔ)言中。這個(gè)goto可以用來(lái)從一個(gè)循環(huán)內(nèi)部跳轉(zhuǎn)到外部。但是從循環(huán)外部跳入循環(huán)內(nèi)是不允許的。 69. 控制臺(tái)應(yīng)用程序和窗口應(yīng)用程序有什么區(qū)別? 控制臺(tái)應(yīng)用程序,設(shè)計(jì)用來(lái)在沒(méi)有用戶界面的命令行中運(yùn)行。 70. return語(yǔ)句怎么用? return語(yǔ)句與程序 (方法或者函數(shù))相關(guān)。在執(zhí)行return語(yǔ)句的時(shí)候,系統(tǒng)將控制權(quán)從被調(diào)用程序交給調(diào)用程序。return語(yǔ)句用于兩種目的: 立即返回當(dāng)前執(zhí)行的代碼的調(diào)用者 返回給當(dāng)前執(zhí)行的代碼的調(diào)用者一些值。 71. Array和LinkedList之間的區(qū)別是什么? 數(shù)組是不關(guān)心彼此元素位置的簡(jiǎn)單數(shù)字序列。他們之間的位置彼此獨(dú)立。增加,刪除或者修改任何數(shù)組元素都是非常容易的。相對(duì)于數(shù)組,鏈表是一個(gè)復(fù)雜的數(shù)字序列。 72. C#有throws子句嗎? 不,不像Java,C#不需要開(kāi)發(fā)者指定方法可以拋出的異常。 73. C#支持可變數(shù)目的參數(shù)嗎? 是的,使用params關(guān)鍵字。該參數(shù)指定為特定類型的參數(shù)列表。 74. 可以重寫私有虛方法嗎? 不可以,私有方法不能在類外訪問(wèn)。 75. 什么是多播委托? 每個(gè)委托對(duì)象保持對(duì)一個(gè)單獨(dú)方法的引用。但是,一個(gè)委托對(duì)象保持對(duì)多個(gè)方法的引用并調(diào)用它們是可能的。這樣的委托對(duì)象成為多播委托或者組合委托。 76. 什么是C#獨(dú)有的特性? XML文檔. 77. 在C#中使用異常是推薦的嗎? 是的,在.NET框架中異常是推薦的錯(cuò)誤處理機(jī)制。 78. 在switch語(yǔ)句中break語(yǔ)句是做什么的? break語(yǔ)句終結(jié)它所在的循環(huán)。它也改變了程序執(zhí)行的流程。 在switch語(yǔ)句中,break語(yǔ)句用在一個(gè)case語(yǔ)句的結(jié)尾處。在C#中break語(yǔ)句是強(qiáng)制性的,避免了一個(gè)case語(yǔ)句流向另一個(gè)case語(yǔ)句。 79. Is C# object oriented?C#是面向?qū)ο蟮膯幔?/strong> 是的,C#和傳統(tǒng)的Java及C++一樣是面向?qū)ο蟮恼Z(yǔ)言。 80. 什么是智能導(dǎo)航? 因?yàn)榉?wù)端驗(yàn)證和頁(yè)面被刷新導(dǎo)致頁(yè)面刷新時(shí),光標(biāo)位置保持不變。 81. CONST和READONLY的區(qū)別是什么? 都是為了定義常量值。const字段只能在聲明這個(gè)域的時(shí)候初始化。readonly字段可以在聲明時(shí)或者構(gòu)造函數(shù)中定義。 82. C#有throws子句嗎? 不,不像Java,C#不需要(甚至不允許)開(kāi)發(fā)者指定方法可以拋出的異常。 83. 方法可以重載的不同方式是什么? 不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序。 84. 事件有返回值嗎? 沒(méi)有,事件沒(méi)有返回類型。 85. 事件是什么? 事件是一個(gè)基于另一個(gè)程序方法執(zhí)行的動(dòng)作。 事件是被對(duì)象或者類使用來(lái)通知其他對(duì)象發(fā)生的事件的委托類型類成員。 事件可以通過(guò)event關(guān)鍵字來(lái)聲明。 86. 什么是標(biāo)識(shí)符? 標(biāo)識(shí)符無(wú)他,它是用來(lái)在程序中唯一識(shí)別各種實(shí)體的名稱。 87. C#中有哪些不同的文本類型? 布爾值: True和False是Boolean類型,分別映射到真和假的狀態(tài)。 整數(shù):用于編寫類型Int,uInt,long和ulong的值。 實(shí)數(shù):用于編寫類型float, double和decimal的值。 字符:代表單字符,通常由有引號(hào)的字符組成,如‘a(chǎn)’。 字符串: C#支持兩種類型的字符串,規(guī)則字符串和原義字符串。規(guī)則字符串由0個(gè)或多個(gè)括在雙引號(hào)中的字符組成,如“116110″。原義字符串由@字符后跟帶雙引號(hào)的字符組成,如@”hello”。 Null: 代表null類型。 88. 什么是數(shù)據(jù)封裝? 數(shù)據(jù)封裝,也被稱為數(shù)據(jù)隱藏,它是類的實(shí)現(xiàn)細(xì)節(jié)對(duì)保持對(duì)用戶隱匿的機(jī)制。用戶只能通過(guò)執(zhí)行稱為方法的特殊函數(shù)來(lái)對(duì)隱藏了成員的類執(zhí)行一組有限的操作。 89. 可以重寫私有虛方法嗎? 不可以,私有方法不能在類外訪問(wèn)。 90. 子程序和函數(shù)的主要區(qū)別是什么? 子程序沒(méi)有返回值,而函數(shù)有。 91. C#和C++的區(qū)別是什么? C#不支持#include語(yǔ)句。它只用using語(yǔ)句。 C#中,類定義在最后不使用分號(hào)。 C#不支持多重繼承。 數(shù)據(jù)類型的顯示轉(zhuǎn)換在C#中比C++中安全很多。 C#中switch也可用于字符串值。 命令行參數(shù)數(shù)組的行為在C#中和C++中不一樣。 92. 什么是嵌套類? 嵌套類是類中的類。 嵌套類是聲明發(fā)生在另一個(gè)類或者接口里面的任何類。 93. 可以給靜態(tài)構(gòu)造函數(shù)參數(shù)嗎? 不可以,靜態(tài)構(gòu)造函數(shù)不可以有參數(shù)。 94. C#中,字符串是值類型還是引用類型? 字符串是對(duì)象(引用類型)。 95. C#提供拷貝構(gòu)造函數(shù)嗎? 不,C#不提供拷貝構(gòu)造函數(shù)。 96. 類或者結(jié)構(gòu)可以有多個(gè)構(gòu)造函數(shù)嗎? 可以,類或者結(jié)構(gòu)可以有多個(gè)構(gòu)造函數(shù)。C#中構(gòu)造函數(shù)可以被重載。 97. 可以創(chuàng)建接口的實(shí)例嗎? 不可以,你不可以創(chuàng)建接口的實(shí)例。 98. 接口可以包含字段嗎? 不可以,接口不能包含字段。 99. 類可以有靜態(tài)構(gòu)造函數(shù)嗎? 是的,類可以有靜態(tài)構(gòu)造函數(shù)。靜態(tài)構(gòu)造函數(shù)在任何靜態(tài)字段被訪問(wèn)之前被立即自動(dòng)調(diào)用,并且通常用來(lái)初始化靜態(tài)類成員。它在第一個(gè)實(shí)例被創(chuàng)建或者任何靜態(tài)成員被引用之前自動(dòng)調(diào)用。靜態(tài)構(gòu)造函數(shù)在實(shí)例構(gòu)造函數(shù)之前調(diào)用。一個(gè)例子如下所示。 100. C#中委托的主要作用是什么? 委托主要用于定義回調(diào)方法。 101. 投影(Shadowing)和重寫(overriding)的區(qū)別是什么? 重寫僅僅重定義實(shí)現(xiàn)而投影重定義整個(gè)元素。 重寫派生類可以通過(guò)“ME”關(guān)鍵字引用父類元素,但投影中你可以通過(guò)”MYBASE”訪問(wèn)父類元素。 102. 事件可以用訪問(wèn)修飾符嗎? 可以,你可以在事件中用訪問(wèn)修飾符。你可以對(duì)事件使用portected關(guān)鍵字,這樣只允許繼承類訪問(wèn)。你可以使用private修飾事件,僅可以供當(dāng)前類對(duì)象訪問(wèn)。 103. 為什么在代碼中用virtual關(guān)鍵字? 代碼中Virtual關(guān)鍵字是用來(lái)定義可以在派生類中重寫的方法和屬性的。 104. 什么是構(gòu)造函數(shù)和析構(gòu)函數(shù)? 構(gòu)造函數(shù)和析構(gòu)函數(shù)是特殊的方法。 構(gòu)造函數(shù)和析構(gòu)函數(shù)是每個(gè)類的特殊方法。 每個(gè)類都有自己的構(gòu)造函數(shù)和析構(gòu)函數(shù),并且在類實(shí)例被創(chuàng)建或者銷毀時(shí)自動(dòng)調(diào)用。 每當(dāng)你訪問(wèn)類的時(shí)候,構(gòu)造函數(shù)就初始化所有類成員。當(dāng)對(duì)象不想再需要的時(shí)候,析構(gòu)函數(shù)就銷毀它們。 105. 我們?cè)趺匆种?/strong>finalize方法? GC.SuppressFinalize()。 106. C#支持可變數(shù)目的參數(shù)嗎? 是的,使用params關(guān)鍵字。 該參數(shù)指定為特定類型的參數(shù)列表,例如,int。為了最大的靈活性,類型可以是object。 使用這種方法的標(biāo)準(zhǔn)例子是System.console.writeLine()。 107. 哪個(gè)方法用來(lái)啟動(dòng)一個(gè)線程? 108. 什么是泛型? 泛型幫助我們創(chuàng)建靈活的強(qiáng)類型集合。 泛型基本上從數(shù)據(jù)類型中分離了邏輯,以保持更好的可重用性,更好的可維護(hù)性等等。 109. 有哪些不同種類的多態(tài)性? 有兩種類型的多態(tài),它們是: 編譯時(shí)多態(tài)性 運(yùn)行時(shí)多態(tài)性 110. 編譯時(shí)多態(tài)性和運(yùn)行時(shí)多態(tài)性的區(qū)別是什么? 編譯時(shí)多態(tài)性 編譯時(shí)多態(tài)性也被稱為方法重載。 方法重載是指有兩個(gè)或更多同名但含有不同簽名的方法。 運(yùn)行時(shí)多態(tài)性 運(yùn)行時(shí)多態(tài)性也被稱為方法重寫。 方法重寫是指有兩個(gè)或更多的同名方法,含有相同的方法簽名但對(duì)應(yīng)不同的實(shí)現(xiàn)。 111. 哪一個(gè)命名空間使XML中多線程編程可行? System.Threading。 112. 在C#中可以聲明一個(gè)靜態(tài)塊嗎? 不可以,因?yàn)镃#不支持靜態(tài)塊,但它支持靜態(tài)方法。 113. 方法可以聲明為密封(sealed)嗎? 在C#中方法不可以聲明為sealed。但當(dāng)我們?cè)谂缮愔貙懸粋€(gè)方法的時(shí)候,我們可以將重寫的方法定義為sealed。通過(guò)其sealed,我們就可以避免對(duì)該方法的進(jìn)一步重寫。 114. 在C#中用什么命令來(lái)實(shí)現(xiàn)屬性? C#中用get和set修飾符來(lái)實(shí)現(xiàn)屬性。 115. 什么是靜態(tài)成員? 定義為靜態(tài)的成員,可以從類級(jí)別上直接調(diào)用,而不是從類實(shí)例上調(diào)用。 116. C#中繼承一個(gè)類的語(yǔ)法是什么? 當(dāng)一個(gè)類從另一個(gè)類派生時(shí),基類的成員就變?yōu)榕缮某蓡T。 在訪問(wèn)基類的成員所使用的訪問(wèn)修飾符指定了派生類中的基類成員的訪問(wèn)狀態(tài)。 C#中從另一個(gè)類繼承類的語(yǔ)法如下: class MyNewClass : MyBaseClass 117. C#中while循環(huán)和do while循環(huán)的基本區(qū)別是什么? while循環(huán)在一開(kāi)始測(cè)試它的條件,這意味著如果條件求值為真,封閉的語(yǔ)句塊執(zhí)行0或者更多次。do while循環(huán)至少遍歷一次語(yǔ)句塊然后在最后才檢查條件。 118. 子程序和函數(shù)的主要區(qū)別是什么? 子程序沒(méi)有返回值,而函數(shù)有。 119. C#中什么是密封類? sealed修飾符用來(lái)阻止從一個(gè)類派生。如果一個(gè)密封類被指定為另一個(gè)類的基類時(shí)會(huì)發(fā)生編譯時(shí)錯(cuò)誤。 120.類和接口的區(qū)別是什么? 抽象類可以實(shí)現(xiàn)它的一些成員,但接口不能實(shí)現(xiàn)它的任何成員。 接口不能有字段,而抽象類可以有字段。 接口僅可以從另一個(gè)接口繼承并且不能繼承抽象類,而抽象類可以繼承另一個(gè)抽象類或另一個(gè)接口。 類可以同時(shí)繼承多個(gè)接口,而類不能同時(shí)繼承多個(gè)類。 抽象類的成員可以定義訪問(wèn)修飾符而接口成員不能定義訪問(wèn)修飾符。 121. 抽象方法和虛方法之間的區(qū)別是什么? 抽象方法不提供實(shí)現(xiàn),并且強(qiáng)制派生類重寫該方法(除非派生類也是個(gè)抽象類),而虛方法可以有實(shí)現(xiàn)并且在派生類中重寫與否是可選的。因此虛方法可以實(shí)現(xiàn)并提供了派生類重寫的選擇。抽象方法不能提供實(shí)現(xiàn)并且強(qiáng)制派生類重寫該方法。 122. 什么是靜態(tài)方法? 只要方法不試圖訪問(wèn)任何實(shí)例數(shù)據(jù)或者其他實(shí)例方法,那么聲明它為靜態(tài)的是可能的。 123. 什么是New修飾符? new修飾符隱藏了基類的成員。C#僅僅支持簽名的隱藏。 124. C#中get和set屬性的優(yōu)勢(shì)是什么? get屬性訪問(wèn)器用于返回屬性值。 set屬性訪問(wèn)器用來(lái)設(shè)置新的值。 125. const和readonly之間有什么區(qū)別? const聲明的字段不能使用static修飾符,而readonly可以使用static修飾符。 const字段只能在聲明時(shí)初始化,而readonly可以在聲明時(shí)或在構(gòu)造函數(shù)中初始化。 const字段的值在設(shè)計(jì)時(shí)就計(jì)算出來(lái)了,而readonly的值在運(yùn)行時(shí)計(jì)算。 |
|
|