首頁  >  文章  >  後端開發  >  分享125個基本的C#面試問答

分享125個基本的C#面試問答

怪我咯
怪我咯原創
2017-04-07 10:36:292558瀏覽

下文是125個基本的C#面試問答清單。這些面試問題簡單、直接了當,涵蓋了C#最基本的概念,大部分和面向物件的概念相關。所以如果你在準備C#面試,我建議你必須掌握這125個基本的C#面試問答來複習你的C#概念。那現在就來看看這125個基本的C#面試問答清單吧。

1. 什麼是C#?

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. 什麼是裝箱和拆箱?

變數值類型隱含轉換為參考類型成為裝箱,例如integerobject類型轉換

引用型別變數轉換回值型別成為拆箱。

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.類別和介面的差別是什麼?

抽象類別可以實現它的一些成員,但介面不能實作它的任何成員。

介面不能有字段,而抽象類別可以有字段。

介面只可以從另一個介面繼承並且不能繼承抽象類,而抽象類別可以繼承另一個抽象類別或另一個介面。

類別可以同時繼承多個接口,而類別不能同時繼承多個類別。

抽象類別的成員可以定義存取修飾符而介面成員不能定義存取修飾符。

121. 抽象方法和虛方法之間的差異是什麼?

抽象方法不提供實現,並且強制派生類別重寫該方法(除非派生類別也是個抽象類別),而虛方法可以有實現並且在派生類別中重寫與否是可選的。因此虛方法可以實現並提供了派生類別重寫的選擇。抽象方法不能提供實作並且強制衍生類別重寫該方法。

122. 什麼是靜態方法?

只要方法不試圖存取任何實例資料或其他實例方法,那麼聲明它為靜態的是可能的。

123. 什麼是New修飾符?

new修飾符隱藏了基底類別的成員。 C#僅僅支持簽名的隱藏。

124. C#中get和set屬性的優點是什麼?

get屬性存取器用於傳回屬性值。

set屬性存取器用來設定新的值。

125. const和readonly之間有什麼差別?

const宣告的欄位不能使用static修飾符,而readonly可以使用static修飾符。

const欄位只能在宣告時初始化,而readonly可以在宣告時或在建構函式中初始化。

const欄位的值在設計時就計算出來了,而readonly的值在執行時計算。

 

以上是分享125個基本的C#面試問答的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn