下文是基本的C#面試問答清單。這些面試問題簡單、直接了當,涵蓋了C#最基本的概念,大部分和麪向對象的概念相關。最近有面試需求的能夠看看,理論仍是要用於實踐,好比參加一場面試:http://t.cn/RZDuuIz程序員
1. 什麼是C#?web
C#(發音」C sharp」)是一種簡單、有別於傳統的、面向對象、類型安全的編程語言。C和C++程序員很快就會熟悉它。C#中結合了高生產率的快速應用開發(RAD)語言。面試
2. C#的有哪些註釋類型?編程
C#中有三種註釋類型。
單行(//)
多行(/* */)
Page/XML 註釋(///)。數組
3. C#.NET中使用的命名空間有哪些?緩存
命名空間是類型的邏輯分組。
using System;
using System.Collections.Generic;
using System.Windows.Forms;安全
4. C#有哪些特色?網絡
C#有如下特色:數據結構
簡單
類型安全
靈活
面向對象
兼容
持久化
互操做性
有別於傳統多線程
5. 繼承有哪些不一樣的類別?
在面向對象編程中繼承的四種類型:
單繼承:包括一個基類和一個派生類。
多層繼承(Hierarchical inheritance) :包括一個基類和繼承自同一個基類的派生類。
多級繼承(Multilevel inheritance):包括從一個派生類派生出來的類。
多重繼承(Multiple inheritance):包括多個基類和一個派生類。
6. 面向對象編程的基本概念是什麼?
有必要理解一些在面向對象編程中普遍使用的概念。它們包括:
對象
類
數據抽象和封裝
繼承
多態性
動態綁定
信息傳遞。
7. 你能夠繼承多個接口嗎?
能夠的。在C#中可能繼承多個接口。
8. 什麼是繼承?
繼承是從一個已經存在的類中派生出來的新類。
9. Define scope?定義做用域?
做用域指的是代碼中一個變量能夠被訪問的區域。
10. public、static和void之間的區別是什麼?
public:關鍵字public是訪問修飾符,用來告訴C#編譯器主(Main)方法能夠被任何人調用。
static:關鍵字static代表主(Main)方法是一個全局方法,不須要穿件類實例便可訪問。編譯器儲存該方法的地址做爲切入點,並利用這個信息在任何對象建立以前開始執行它。
void:關鍵字void是一個類型修飾符代表主(Main)方法不返回任何值。
11. C#中的修飾符有哪些?
Abstract
Sealed
Virtual
Const
Event
Extern
Override
Readonly
Static
New
12. C#中訪問修飾符的種類有哪些?
C#中的訪問修飾符是:
public
protect
private
internal
internal protect
13. 什麼是裝箱和拆箱?
變量值類型隱式轉換爲引用類型成爲裝箱,例如integer到object的類型轉換。
引用類型變量轉換回值類型成爲拆箱。
14. 對象是什麼?
對象是類的實例。對象的建立使用new操做。一個類在內存中建立一個對象,將包含特定對象的值和行爲(或者方法)的信息。
15. C#中有哪些類型的數組?
一維數組(Single-Dimensional)
多維數組(Multidimensional)
交錯數組(Jagged arrays)。
16. 對象和實例之間的區別是什麼?
用戶定義的類型的實例稱爲一個對象。咱們能夠從一個類實例化不少對象。
對象是類的實例。
17. Define destructors?定義析構函數?
當類對象超出做用域或者被明確刪除的時候,析構函數被調用。析構函數,顧名思義是用來銷燬由構造函數建立的對象的。正如構造函數,析構函數是一個類成員方法,方法名和類名相同,只是由波浪號開頭。
18. 枚舉數據類型怎麼用?
枚舉類型是另外一種用戶定義類型,它提供了一種鏈接名字爲數字的方式,從而提升了代碼的可理解性。enum關鍵字自動地枚舉一組詞,賦予它們的值爲0,1,2並以此類推。
19. 定義構造函數?
構造函數是和它的類同名的成員方法。每當建立其關聯的類的對象時構造函數都會被調用。它之因此被稱爲構造函數是由於它構造了類的數據成員的值。
20. 什麼是封裝?
包裝數據和功能成爲一個單元(稱爲類)就被稱爲封裝。封裝包含而且隱藏對象信息,例如內部數據結構和代碼。
21. C#支持多重繼承嗎?
不支持,它不可能。支持多級繼承。
22. 什麼是ENUM?
Enum用於定義常量。
23. 數據集是什麼?
數據集(DataSet)是從任何數據源載入數據的內存表示。
24. private和public關鍵字的區別是什麼?
Private:關鍵字private是默認訪問級別,而且在全部其餘訪問級別中是最嚴格的。它給予一個類型或者類型成員最小的權限。私有成員僅僅在聲明其的類體中能夠被訪問。
Public:關鍵字public是全部訪問級別中最自由地,沒有任何訪問限制。公共成員的訪問不只能夠來自外部,也能夠來自內部,而且能夠自由訪問定義在類體內或者體外的任何成員。
25. 定義多態性?
多態性意味着一個名字,多種形式。它使咱們在一個程序中能夠定義一個以上相同名字的方法。它讓咱們重載操做以便這樣的操做能夠對不一樣的實例表現不一樣的行爲。
26. 什麼是交錯數組?
交錯數組是元素爲數組的數組。
交錯數組元素的維度和大小能夠不一樣。
交錯數組有時稱爲「數組的數組」。
27. 什麼是抽象基類?
抽象類是被設計爲專門用於做爲基類的類。抽象類至少還有一個純虛方法。
28. 方法重寫和方法重載有什麼區別?
當重寫一個方法時,你改變了派生類中方法的行爲。重載方法只涉及在類中另外一個同名的方法。
29. ref和out參數之間的區別是什麼?
傳遞給ref參數的參數必須先初始化。與此相比,對out參數來講,在參數傳遞給out參數以前不須要顯示初始化。
30. C#中using語句怎麼用?
using語句一般是獲取資源,執行語句,而後釋放該資源。
31. 什麼是序列化?
序列化(Serialization)是將對象轉換爲字節流的過程。
反序列化(De-serialization)是從字節流建立對象這樣相反的過程。
序列化/反序列化經常使用於傳遞對象。
32. 結構和類之間有什麼區別?
結構是值類型,類是引用類型。
結構不能有構造函數和析構函數。
類能夠同時有構造函數和析構函數。
結構不支持繼承,而類支持繼承。
33. 類和接口之間有什麼區別?
類(Class)是對象的邏輯表示。它是數據集合和相關子過程的定義。
接口(Interface)也是一個類,包含沒有任何方法體定義的方法。類不支持多重繼承,可是接口支持。
34. 什麼是委託?
委託是類型安全,面向對象的函數指針的實現,而且在許多一個組件須要回調到使用它的組件這樣的狀況下使用。
35. 什麼是認證與受權?
認證是識別用戶的過程。認證是以證書(用戶名和密碼)來識別/驗證用戶。
受權在認證以後執行。受權是一個基於這些用戶身份授予訪問權限的過程。
受權容許用戶對特定資源的訪問。
36. 什麼是基類?
類聲明能夠經過類名加一個冒號和基類名來指定基類。省略基類說明等同於從object類派生。
37. 「this」能夠在靜態方法中用嗎?
不,‘This’不能在靜態方法中使用。僅僅只有靜態變量/方法能夠在靜態方法中使用。
38. constants、readonly和static之間的區別是什麼?
Constants: 值不能變。
Read-only: 值在類的構造函數中僅僅初始化一次。
Static: 值能夠被初始化一次。
39. C#中支持哪些語句類型?
C#支持的幾種不一樣的語句類型是
塊語句
聲明語句
表達式語句
選擇語句
迭代語句
跳轉語句
異常處理語句
檢查和未檢查
Lock語句
40. 什麼是接口類?
它是一個抽象類,全部公共抽象方法必需要在其繼承類中實現。
41. 什麼是值類型和引用類型?
值類型存儲在堆棧中。
例如: bool, byte, chat, decimal, double, enum, float, int, long, sbyte, short, strut, uint, ulong, ushort。
引用類型存儲在託管堆中。
例如: class, delegate, interface, object, string。
42. 關鍵字string和System.String類之間有什麼區別?
關鍵字string是System.String類的別名。因此,System.String和關鍵字string是同樣的,你可使用任何你喜歡的命名約定。String類提供了許多方法用於安全建立,操做和比較字符串。
43. C#中提供的兩種數據類型是什麼?
值類型
引用類型
44. 有哪些緩存的種類?
有三種類型的緩存:
輸出緩存(Output Caching):存儲asp.net頁面的應答信息。
片斷緩存(Fragment Caching):僅緩存/存儲部分頁面內容(用戶控制)。
數據緩存(Data Caching):爲了性能經過編程的方式來緩存對象。
45. 自定義控件和用戶控件之間的區別是什麼?
自定義控件是編譯後的代碼(Dlls),容易使用,建立困難,能夠放在工具箱。拖拉使用的控件。
屬性能夠直觀地在設計時指定。能夠被多個應用程序使用(若是共享Dlls),即便是私有的也能拷貝到web應用程序的bin目錄,添加引用和使用。一般是用來爲獨立的消費應用程序提供公用功能。
用戶控件和ASP的include文件,輕鬆建立,不能放置在箱中來拖拉放置它。用戶控件在單個應用程序文件之間共享。
46. 什麼是方法?
方法是由對象或者類執行來實現計算或者操做的成員。靜態方法經過類訪問。實例方法經過類的實例來訪問。
47. 什麼是域?
域是類或者類的實例相關的變量。
48. 什麼是事件?
事件是使一個類或對象可以提供通知的成員。事件聲明像域聲明同樣,除了聲明包含event關鍵字而且類型必須爲委託類型。
49.什麼是文本和它們的類型?
文本是程序分配給變量的值常量。C#支持的幾種文本類型是
整數(Integer literals)
實數(Real literals)
布爾值(Boolean literals)
單字符(Single character literals)
字符串(String literals)
反斜線(Backslash character literals)
50. 值類型和引用類型的區別是什麼?
值類型存儲在堆棧上,是一個變量的值賦值給另外一個變量。
引用類型存儲在託管堆上,是兩個引用變量之間的發生賦值。
51. C#有什麼特性?
C#是一個簡單而強大的編程語言,用於編寫企業版的應用程序。
它是C++和VB的混合體。它保留了許多C++特性,如語句,表達式和運算符並結合了VB的生產力。
C#幫助開發者輕易地構建網絡服務,可以經過任何語言,任何平臺來訪問Internet。
C#幫助開發者用更少的代碼完成開發,從而在代碼中錯誤更少。
C#引入了至關大的改進和創新,如類型安全,版本控制,事件和垃圾收集這些領域。
52. 錯誤的類型是什麼?
語法錯誤(Syntax error)
邏輯錯誤(Logic error)
運行時錯誤(Runtime error)
53. break和continue語句之間有什麼區別?
break語句是用來終止當前封閉循環或者它所在的條件語句的。咱們已經使用break語句跳出switch語句。
continue語句是用來改變執行順序的。和break語句那樣跳出循環相反,continue語句中止當前迭代而且只將控制返回到循環頂部。
54. 定義命名空間?
命名空間被稱爲容器,用來組織分層的.NET類。
55. 什麼是代碼組?
代碼組是一組共享安全上下文的套件。
56. C#中什麼是密封類?
sealed修飾符用來阻止從一個類派生。若是一個密封類被指定爲另外一個類的基類時會發生編譯時錯誤。
57. 靜態方法和實例方法的區別是什麼?
以static修飾符聲明的方法是靜態方法。靜態方法不操做具體的實例,而且只能被靜態成員訪問。
沒有以static修飾符聲明的方法是實例方法。實例方法操做一個具體的實例而且能夠被靜態和實例成員訪問。在其上調用實例方法的實例能夠像這樣顯示訪問。在靜態方法中這麼調用是錯誤的。
58. C#中有哪些變量的類型?
C#中不一樣的變量類型是:
靜態變量(static variables)
實例變量(instance variable)
值參數(value parameters)
引用參數(reference parameters)
數組元素(array elements)
輸出參數(output parameters)
局部變量(local variables)
59. 方法重載是什麼意思?
方法重載容許在同一個類中的多個方法有相同的名字,只要它們具備獨特的簽名。當編譯一個重載方法的調用時,編譯器使用重載決策決定具體調用的方法。
60. 什麼是參數?
參數是用來傳遞值或者變量引用給方法的。方法的參數從被調用方法時指定的參數獲得它們實際的值。有四種參數:值參數,引用參數,輸出參數和參數數組。
61. C#是面向對象的語言嗎?
是的,C#和傳統的Java及C++同樣是面向對象的語言。
62. Array和Arraylist之間的區別是什麼?
數組是相同類型的集合。數組大小在它聲明的時候就固定了。鏈表和數組類似,但它沒有固定的大小。
63. C#中有什麼特殊的運算符?
C#支持一下特殊運算符。
is (關係運算符)
as (關係運算符)
typeof (類型運算符)
sizeof (大小運算符,用於獲取非託管類的大小)
new (對象運算符)
.dot (成員訪問運算符)
checked (溢出檢查)
unchecked?(防止溢出檢查)
64. C#中運算符的含義是什麼?
運算符是界定了對類實例應用特定的運算表達式內涵的成員。能夠定義三種類型的運算符:一元運算符,二元運算符和轉換運算符。全部的運算符必須聲明爲public和static的。
65. 什麼是類型參數化?
類型參數化是一個類型在另外一個值或者類型之上參數化。
66. 抽象類的特性是什麼?
抽象類不能被實力化,在抽象類上使用new操做符是錯誤的。
抽象類容許(但沒必要要)包含抽象方法和入口。
抽象類不能用scaled修飾符。
67. abstract關鍵字怎麼用?
修飾符abstract是用於類的關鍵字,以代表這個類自己不能直接有實例或者對象,而且對於其餘類來講它只能是一個「基類」。
68. goto語句怎麼用?
goto語句仍然包含在C#語言中。這個goto能夠用來從一個循環內部跳轉到外部。可是從循環外部跳入循環內是不容許的。
69. 控制檯應用程序和窗口應用程序有什麼區別?
控制檯應用程序,設計用來在沒有用戶界面的命令行中運行。
窗口應用程序,設計用來經過用戶界面在用戶桌面執行。
70. return語句怎麼用?
return語句與程序 (方法或者函數)相關。在執行return語句的時候,系統將控制權從被調用程序交給調用程序。return語句用於兩種目的:
當即返回當前執行的代碼的調用者
返回給當前執行的代碼的調用者一些值。
71. Array和LinkedList之間的區別是什麼?
數組是不關心彼此元素位置的簡單數字序列。他們之間的位置彼此獨立。增長,刪除或者修改任何數組元素都是很是容易的。相對於數組,鏈表是一個複雜的數字序列。
72. C#有throws子句嗎?
不,不像Java,C#不須要開發者指定方法能夠拋出的異常。
73. C#支持可變數目的參數嗎?
是的,使用params關鍵字。該參數指定爲特定類型的參數列表。
74. 能夠重寫私有虛方法嗎?
不能夠,私有方法不能在類外訪問。
75. 什麼是多播委託?
每一個委託對象保持對一個單獨方法的引用。可是,一個委託對象保持對多個方法的引用並調用它們是可能的。這樣的委託對象成爲多播委託或者組合委託。
76. 什麼是C#獨有的特性?
XML文檔.
77. 在C#中使用異常是推薦的嗎?
是的,在.NET框架中異常是推薦的錯誤處理機制。
78. 在switch語句中break語句是作什麼的?
break語句終結它所在的循環。它也改變了程序執行的流程。
在switch語句中,break語句用在一個case語句的結尾處。在C#中break語句是強制性的,避免了一個case語句流向另外一個case語句。
79. Is C# object oriented?C#是面向對象的嗎?
是的,C#和傳統的Java及C++同樣是面向對象的語言。
80. 什麼是智能導航?
由於服務端驗證和頁面被刷新致使頁面刷新時,光標位置保持不變。
81. CONST和READONLY的區別是什麼?
都是爲了定義常量值。const字段只能在聲明這個域的時候初始化。readonly字段能夠在聲明時或者構造函數中定義。
82. C#有throws子句嗎?
不,不像Java,C#不須要(甚至不容許)開發者指定方法能夠拋出的異常。
83. 方法能夠重載的不一樣方式是什麼?
不一樣的參數類型,不一樣的參數個數,不一樣的參數順序。
84. 事件有返回值嗎?
沒有,事件沒有返回類型。
85. 事件是什麼?
事件是一個基於另外一個程序方法執行的動做。
事件是被對象或者類使用來通知其餘對象發生的事件的委託類型類成員。
事件能夠經過event關鍵字來聲明。
86. 什麼是標識符?
標識符無他,它是用來在程序中惟一識別各類實體的名稱。
87. C#中有哪些不一樣的文本類型?
布爾值: True和False是Boolean類型,分別映射到真和假的狀態。
整數:用於編寫類型Int,uInt,long和ulong的值。
實數:用於編寫類型float, double和decimal的值。
字符:表明單字符,一般由有引號的字符組成,如‘a’。
字符串: C#支持兩種類型的字符串,規則字符串和原義字符串。規則字符串由0個或多個括在雙引號中的字符組成,如「116110″。原義字符串由@字符後跟帶雙引號的字符組成,如@」hello」。
Null: 表明null類型。
88. 什麼是數據封裝?
數據封裝,也被稱爲數據隱藏,它是類的實現細節對保持對用戶隱匿的機制。用戶只能經過執行稱爲方法的特殊函數來對隱藏了成員的類執行一組有限的操做。
89. 能夠重寫私有虛方法嗎?
不能夠,私有方法不能在類外訪問。
90. 子程序和函數的主要區別是什麼?
子程序沒有返回值,而函數有。
91. C#和C++的區別是什麼?
C#不支持#include語句。它只用using語句。
C#中,類定義在最後不使用分號。
C#不支持多重繼承。
數據類型的顯示轉換在C#中比C++中安全不少。
C#中switch也可用於字符串值。
命令行參數數組的行爲在C#中和C++中不同。
92. 什麼是嵌套類?
嵌套類是類中的類。
嵌套類是聲明發生在另外一個類或者接口裏面的任何類。
93. 能夠給靜態構造函數參數嗎?
不能夠,靜態構造函數不能夠有參數。
94. C#中,字符串是值類型仍是引用類型?
字符串是對象(引用類型)。
95. C#提供拷貝構造函數嗎?
不,C#不提供拷貝構造函數。
96. 類或者結構能夠有多個構造函數嗎?
能夠,類或者結構能夠有多個構造函數。C#中構造函數能夠被重載。
97. 能夠建立接口的實例嗎?
不能夠,你不能夠建立接口的實例。
98. 接口能夠包含字段嗎?
不能夠,接口不能包含字段。
99. 類能夠有靜態構造函數嗎?
是的,類能夠有靜態構造函數。靜態構造函數在任何靜態字段被訪問以前被當即自動調用,而且一般用來初始化靜態類成員。它在第一個實例被建立或者任何靜態成員被引用以前自動調用。靜態構造函數在實例構造函數以前調用。一個例子以下所示。
100. C#中委託的主要做用是什麼?
委託主要用於定義回調方法。
101. 投影(Shadowing)和重寫(overriding)的區別是什麼?
重寫僅僅重定義實現而投影重定義整個元素。
重寫派生類能夠經過「ME」關鍵字引用父類元素,但投影中你能夠經過」MYBASE」訪問父類元素。
102. 事件能夠用訪問修飾符嗎?
能夠,你能夠在事件中用訪問修飾符。你能夠對事件使用portected關鍵字,這樣只容許繼承類訪問。你可使用private修飾事件,僅能夠供當前類對象訪問。
103. 爲何在代碼中用virtual關鍵字?
代碼中Virtual關鍵字是用來定義能夠在派生類中重寫的方法和屬性的。
104. 什麼是構造函數和析構函數?
構造函數和析構函數是特殊的方法。
構造函數和析構函數是每一個類的特殊方法。
每一個類都有本身的構造函數和析構函數,而且在類實例被建立或者銷燬時自動調用。
每當你訪問類的時候,構造函數就初始化全部類成員。當對象不想再須要的時候,析構函數就銷燬它們。
105. 咱們怎麼抑制finalize方法?
GC.SuppressFinalize()。
106. C#支持可變數目的參數嗎?
是的,使用params關鍵字。
該參數指定爲特定類型的參數列表,例如,int。爲了最大的靈活性,類型能夠是object。
使用這種方法的標準例子是System.console.writeLine()。
107. 哪一個方法用來啓動一個線程?
Start。
108. 什麼是泛型?
泛型幫助咱們建立靈活的強類型集合。
泛型基本上從數據類型中分離了邏輯,以保持更好的可重用性,更好的可維護性等等。
109. 有哪些不一樣種類的多態性?
有兩種類型的多態,它們是:
編譯時多態性
運行時多態性
110. 編譯時多態性和運行時多態性的區別是什麼?
編譯時多態性
編譯時多態性也被稱爲方法重載。
方法重載是指有兩個或更多同名但含有不一樣簽名的方法。
運行時多態性
運行時多態性也被稱爲方法重寫。
方法重寫是指有兩個或更多的同名方法,含有相同的方法簽名但對應不一樣的實現。
111. 哪個命名空間使XML中多線程編程可行?
System.Threading。
112. 在C#中能夠聲明一個靜態塊嗎?
不能夠,由於C#不支持靜態塊,但它支持靜態方法。
113. 方法能夠聲明爲密封(sealed)嗎?
在C#中方法不能夠聲明爲sealed。但當咱們在派生類重寫一個方法的時候,咱們能夠將重寫的方法定義爲sealed。經過其sealed,咱們就能夠避免對該方法的進一步重寫。
114. 在C#中用什麼命令來實現屬性?
C#中用get和set修飾符來實現屬性。
115. 什麼是靜態成員?
定義爲靜態的成員,能夠從類級別上直接調用,而不是從類實例上調用。
116. C#中繼承一個類的語法是什麼?
當一個類從另外一個類派生時,基類的成員就變爲派生的成員。
在訪問基類的成員所使用的訪問修飾符指定了派生類中的基類成員的訪問狀態。
C#中從另外一個類繼承類的語法以下:
class MyNewClass : MyBaseClass
117. C#中while循環和do while循環的基本區別是什麼?
while循環在一開始測試它的條件,這意味着若是條件求值爲真,封閉的語句塊執行0或者更屢次。do while循環至少遍歷一次語句塊而後在最後才檢查條件。
118. 子程序和函數的主要區別是什麼?
子程序沒有返回值,而函數有。
119. C#中什麼是密封類?
sealed修飾符用來阻止從一個類派生。若是一個密封類被指定爲另外一個類的基類時會發生編譯時錯誤。
120.類和接口的區別是什麼?
抽象類能夠實現它的一些成員,但接口不能實現它的任何成員。
接口不能有字段,而抽象類能夠有字段。
接口僅能夠從另外一個接口繼承而且不能繼承抽象類,而抽象類能夠繼承另外一個抽象類或另外一個接口。
類能夠同時繼承多個接口,而類不能同時繼承多個類。
抽象類的成員能夠定義訪問修飾符而接口成員不能定義訪問修飾符。