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