當前位置:概念範文網>求職簡歷>筆試題目>

C#筆試常見題

筆試題目 閱讀(2.01W)

C#旨在設計成為一種"簡單、現代、通用",以及面向物件的程式設計語言,此種語言的實現,應提供對於以下軟體工程要素的支援:強型別檢查、陣列維度檢查、未初始化的變數引用檢測、自動垃圾收集(Garbage Collection,指一種自動記憶體釋放技術)。下面就由本站小編為大家介紹一下C#筆試常見題的文章,歡迎閱讀。

C#筆試常見題

C#筆試常見題篇1

1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。

private : 私有成員, 在類的內部才可以訪問。

protected : 保護成員,該類內部和繼承類中可以訪問。

public : 公共成員,完全公開,沒有訪問限制。

internal: 當前程式集內可以訪問。

2、中的五個主要物件

Connection:主要是開啟程式和資料庫之間的連線。沒有利用連線物件將資料庫開啟,是無法從資料庫中取得資料的。Close和Dispose的區別,Close以後還可以Open,Dispose以後則不能再用。

Command:主要可以用來對資料庫發出一些指令,例如可以對資料庫下達查詢、新增、修改、刪除資料等指令,以及呼叫存在資料庫中的儲存過程等。這個物件是架構在Connection 物件上,也就是Command 物件是透過連線到資料來源。

DataAdapter:主要是在資料來源以及DataSet 之間執行資料傳輸的工作,它可以透過Command 物件下達命令後,並將取得的資料放入DataSet 物件中。這個物件是架構在Command物件上,並提供了許多配合DataSet 使用的功能。

DataSet:這個物件可以視為一個暫存區(Cache),可以把從資料庫中所查詢到的資料保留起來,甚至可以將整個資料庫顯示出來,DataSet是放在記憶體中的。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter物件取得一些例如主鍵等的資料表結構,並可以記錄資料表間的關聯。DataSet 物件可以說是 中重量級的物件,這個物件架構在DataAdapter物件上,本身不具備和資料來源溝通的能力;也就是說我們是將DataAdapter物件當做DataSet 物件以及資料來源間傳輸資料的橋樑。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:當我們只需要循序的讀取資料而不需要其它操作時,可以使用DataReader 物件。DataReader物件只是一次一筆向下循序的讀取資料來源中的資料,這些資料是存在資料庫伺服器中的,而不是一次性載入到程式的記憶體中的,只能(通過遊標)讀取當前行的資料,而且這些資料是隻讀的,並不允許作其它的操作。因為DataReader 在讀取資料的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節省資源而且效率很好。使用DataReader 物件除了效率較好之外,因為不用把資料全部傳回,故可以降低網路的負載。

使用Connection 物件來連線資料庫,使用Command 或DataAdapter物件來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,然後再使用取得的DataReader 或DataAdapter 物件操作資料結果。

3、列舉 頁面之間傳遞值的幾種方式。

1.使用QueryString, 如....?id=1; response. Redirect....

2.使用Session變數

3.使用sfer

ie傳值

4、C#中的委託是什麼?事件是不是一種委託?事件和委託的關係。

委託可以把一個方法作為引數代入另一個方法。

委託可以理解為指向一個函式的指標。

委託和事件沒有可比性,因為委託是型別,事件是物件,下面說的是委託的物件(用委託方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委託實現的。因為對於事件來講,外部只能“註冊自己+=、登出自己-=”,外界不可以登出其他的註冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委託例項的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委託和add、remove兩個方法

C#筆試常見題篇2

1、override與過載(overload)的區別

過載是方法的名稱相同。引數或引數型別不同,進行多次過載以適應不同的需要。過載(overload)是面向過程的概念。

Override 是進行基類中函式的重寫。Override是面向物件的概念

2、C#中索引器是否只能根據數字進行索引?是否允許多個索引器引數?

引數的個數和型別都是任意的。加分的補充回答:用reflector反編譯可以看出,索引器的內部本質上就是set_item、get_item方法。

基礎知識:

索引的語法:

public string this[string s],通過get、set塊來定義取值、賦值的邏輯

索引可以有多個引數、引數型別任意

索引可以過載。

如果只有get沒有set就是隻讀的索引。

索引其實就是set_Item、get_Item兩個方法。

3、屬性和public欄位的區別是什麼?呼叫set方法為一個屬性設值,然後用get方法讀取出來的值一定是set進去的值嗎?

屬性可以對設值、取值的過程進行非法值控制,比如年齡禁止設值負數,而欄位則不能進行這樣的設定。雖然一般情況下get讀取的值就是set設定的值,但是可以讓get讀取的值不是set設定的值的,極端的例子。Public Age{get{return 100;}set}。加分的補充回答:用reflector反編譯可以看出,屬性內部本質上就是set_***、get_***方法,詳細參考傳智播客培訓視訊中串講基礎的部分。

class Person

{

public int Age

{

get

{

return 3;

}

set

{

}

}

}

Person p1 = new Person;

= 30;

++;

e();//輸出3

必須手寫掌握的程式碼(既包含拿電腦寫,拿筆寫):

1、 手寫三層架構

2、 手寫氣泡排序

3、 手寫AJAX:XMLHttpRequest

4、 手寫增刪改查、SQLHelper

C#筆試常見題篇3

1、三層架構

通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、資料訪問層(DAL)。

區分層次的目的即為了“高內聚,低耦合”的思想。

表現層(UI):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候的所見所得。

業務邏輯層(BLL):針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。

資料訪問層(DAL):該層所做事務直接操作資料庫,針對資料的增添、刪除、修改、更新、查詢等每層之間是一種垂直的關係。

三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層程式碼未確定其介面(契約)前,上層程式碼是無法開發的,下層程式碼介面(契約)的變化將使上層的程式碼一起變化。

優點: 分工明確,條理清晰,易於除錯,而且具有可擴充套件性。

缺點: 增加成本。

2、關於拆箱裝箱:

1)什麼是裝箱(boxing)和拆箱(unboxing)? (*)

Object是引用型別,但是它的子類Int32竟然不能去Object能去的“要求必須是引用型別”

的地方,違反了繼承的原則,所以需要把Int32裝在Object中才能傳遞。

裝箱:從值型別介面轉換到引用型別。

拆箱:從引用型別轉換到值型別。

object obj = null;//引用型別

obj = 1;//裝箱,boxing。把值型別包裝為引用型別。

int i1 = (int)obj;//拆箱。unboxing

2)下面三句程式碼有沒有錯,以inboxing或者unboxing為例,解釋一下記憶體是怎麼變化的

int i=10;

object obj = i;

int j = obj;

分析:在inboxing(裝箱)時是不需要顯式的型別轉換的,不過unboxing(拆箱)需要顯式的型別轉換,所以第三行程式碼應該改為:

3 int j = (int)obj;

要掌握裝箱與拆箱,就必須瞭解CTS及它的特點:

NET重要技術和基礎之一的CTS(Common Type System)。CTS是為了實現在應用程式宣告和使用這些型別時必須遵循的規則而存在的通用型別系統。將整個系統的型別分成兩大類 :值型別和引用型別。

CTS中的所有東西都是物件;所有的物件都源自一個基類——ct型別。值型別的一個最大的特點是它們不能為null,值型別的變數總有一個值。為了解決值型別不可以為null,引用型別可以為null的問題,微軟在中引入了裝箱和拆箱:裝箱就是將值型別用引用型別包裝起來轉換為引用型別;而從引用型別中拿到被包裝的值型別資料進行拆箱。

(*)

renceEquals;//用來判斷兩個物件是否是同一個物件

eLine(renceEquals(3,3));//因為兩個3被裝到了兩個箱子中,所以是false

Equals ==的關係

3、CTS、CLS、CLR分別作何解釋(*)把英文全稱背過來。

C#和的關係。

C#只是抽象的語言,可以把C#編譯生成Java平臺的二進位制程式碼,也可以把Java程式碼編譯生成平臺的二進位制程式碼。所以C#只是提供了if、while、+-*/、定義類、int、string等基礎的語法,而t32、FileStream、SqlConnection、t等都屬於的東西。深藍色是C#的,淺藍色是的。

C# new→IL:newobj

C# string →中的String

型別的差別:中的Int32在C#中是int,在中是Integer。String、Int32等公共型別。

語法的差別:IL中建立一個物件的方法是L_0001: newobj instance void 索引.C1::

C#中是new C1;中是 Dim c1 As New C1

CTS:Common Type System 通用型別系統。Int32、Int16→int、String→string、Boolean→bool。每種語言都定義了自己的型別,通過CTS提供了公共的型別,然後翻譯生成對應的型別。

CLS:Common Language Specification 通用語言規範。不同語言語法的不同。每種語言都有自己的語法,通過CLS提供了公共的語法,然後不同語言翻譯生成對應的語法。

CLR:Common Language Runtime 公共語言執行時,就是GC、JIT等這些。有不同的CLR,比如伺服器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相當於一個發動機,負責執行IL。

4、在dotnet中類(class)與結構(struct)的異同?

Class可以被例項化,屬於引用型別,是分配在記憶體的堆上的。類是引用傳遞的。

Struct屬於值型別,是分配在記憶體的棧上的。結構體是複製傳遞的。加分的回答:Int32、Boolean等都屬於結構體。

5、堆和棧的區別?

棧是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就棧的大小有明確的定義;區域性值型別變數、值型別引數等都在棧記憶體中。

堆是程式執行期間動態分配的記憶體空間,你可以根據程式的執行情況確定要分配的堆記憶體的大小。

6、能用foreach遍歷訪問的物件的要求

需要實現IEnumerable介面或宣告GetEnumerator方法的型別。

7、GC是什麼? 為什麼要有GC?

C/C++中由程式設計師進行物件的回收像學校食堂中由學生收盤子,中由GC進行垃圾回收像餐館中店員去回收。

GC是垃圾收集器(Garbage Collection)。程式設計師不用擔心記憶體管理,因為垃圾收集器會自動進行管理。GC只能處理託管記憶體資源的釋放,對於非託管資源則不能使用GC進行回收,必須由程式設計師手工回收,一個例子就是FileStream或者SqlConnection需要程式設計師呼叫Dispose進行資源的回收。

要請求垃圾收集,可以呼叫下面的方法:ect一般不需要手動呼叫ect。當一個物件沒有任何變數指向(不再能使用)的時候就可以被回收了。

基礎知識:當沒有任何變數指向一個物件的時候物件就可以被回收掉了,但不一定會立即被回收。

object obj = new object;//只有new才會有新物件

eLine(obj);

object obj2 = obj;

obj = null;

obj2 = null;

eLine;

8、值型別和引用型別的區別?

1.將一個值型別變數賦給另一個值型別變數時,將複製包含的值。引用型別變數的賦值只複製對物件的引用,而不復制物件本身。

2.值型別不可能派生出新的型別:所有的值型別均隱式派生自 eType。但與引用型別相同的是,結構也可以實現介面。

3.值型別不可能包含 null 值:然而,可空型別功能允許將 null 賦給值型別。

4.每種值型別均有一個隱式的預設建構函式來初始化該型別的預設值。

9、C#中的介面和類有什麼異同。

不同點:

不能直接例項化介面。

介面不包含方法的實現。

介面可以多繼承,類只能單繼承。

類定義可在不同的原始檔之間進行拆分。

相同點:

介面、類和結構都可以從多個介面繼承。

介面類似於抽象基類:繼承介面的任何非抽象型別都必須實現介面的所有成員。

介面和類都可以包含事件、索引器、方法和屬性。

基礎知識:介面只能定義方法(只能定義行為,不能定義實現也就是欄位),因為事件、索引器、屬性本質上都是方法,所以介面中也可以定義事件、索引器、屬性。

10、abstract class和interface有什麼區別?

相同點:

都不能被直接例項化,都可以通過繼承實現其抽象方法。

不同點:

介面支援多繼承;抽象類不能實現多繼承。

介面只能定義行為;抽象類既可以定義行為,還可能提供實現。

介面只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義欄位和包含實現的方法;

抽象類可以定義欄位、屬性、包含有實現的方法。

介面可以作用於值型別(Struct)和引用型別(Class);抽象類只能作用於引用型別。例如,Struct就可以繼承介面,而不能繼承類。

加分的補充回答:講設計模式的時候SettingsProvider的例子。