好像也是很多面試題的題目。
不過這裡發的是快要考試的參考題目。大家對參考答案有什麼疑義,請跟鐵!~
簡答題目
1. 物件導向的思想主要包括什嗎?繼承 多態 封裝
封裝:用抽象的資料類型將資料和基於資料的操作封裝在一起,資料被保護在抽象資料類型內部。
繼承:子類擁有父類的所有資料和操作。
多態:一個程式中同名的不同方法共存的情況。
有兩種形式的多態– 重載與重寫。
2. 什麼是裝箱和拆箱?舉例說明。
裝箱(boxing)和拆箱(unboxing)機制使得在C#類型系統中,任何實值型別、參考型別和object(對象)類型之間進行轉換,這種轉換稱為綁定串連。簡單地說,有了裝箱和拆箱的概念,對任何類型的值來說最終都可看作是object類型。 1、裝箱轉換
含義:將一個實值型別隱式地轉換成一個object類型,或把這個實值型別轉換成一個被該實值型別應用的介面類型,把一個實值型別的值裝箱,就是建立一個object執行個體並將值複製給這個object
如: int I=10; object obj=I; 也可用顯式的方法進行裝箱操作: object obj=(object)I;
2、拆箱轉換
和裝箱相反,拆箱轉換是指將一個物件類型顯式地轉換成一個實值型別,或將一個介面類型顯式地轉換成一個執行該介面的實值型別。
過程分兩步:
首先,檢查這個對象執行個體,看它是否為給定的實值型別的裝箱值
然後,把這個執行個體的值拷貝給實值型別的變數。如:
int I=10;
object obj=I;
Int j=(int)obj;
3. 什麼是重載?override與重載的區別?
重載是指標對所繼承下來到方法,重新設計其處理方式,為將來原本處理方式覆蓋過去。
在衍生類別要覆蓋的方法前加override修飾,而基類的同名方法前加virtual修飾。這樣就能實現多態。多態指一個程式中同名的不同方法共存的情況。 有兩種形式的多態– 重載與重寫。
4. 實值型別和參考型別的區別?寫出C#的範例代碼。
實值型別的變數本身包含他們的資料,而參考型別的變數包含的是指向包含資料的記憶體塊的引用或叫控制代碼。
實值型別變數儲存在堆棧。每個程式在執行時都有自己的堆棧,其他程式不能訪問。
參考型別儲存在堆。參考型別存貯實際資料的引用值的地址。
C#中的參考型別有4種
(類、代表、數組、介面)
5. 如何理解委託?
代理是C#中的一種新的類型,要把方法作為參數傳遞給其他方法時,需要用到代理。
方法通過參數獲得外界傳遞給他的資料,並對這些資料進行一定的操作。
C#通過代理機制來實現,通過參數把一個方法傳遞給另外一個方法。
代理四步曲:
a.產生自訂代理類:delegate int MyDelegate();
b.用New運算子執行個體化代理類:
MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最後通過執行個體對象調用方法:int ret = d();
d. 在程式中像調用方法一樣應用代理的執行個體對象調用它指向的方法。 delegate int d(int I);
6. C#中的介面和類有什麼異同。
什麼是類?類可以這麼理解.類就是功能的集合.類也可以看做是實現一種功能的集合或者方法..介面的概念:什麼是介面?介面可以理解為,對類的規定,對類的約束,甚至對整個項目的約束. 種模版,定義了對象必須實現的方法,其目的就是讓這些方法可以作為介面執行個體被引用。介面不能被執行個體化。介面是負責功能的定義,項目中通過介面來規範類,操作類以及抽象類別的概念!而類是負責功能的具體實現!在類中也有抽象類別的定義,抽象類別與介面的區別在於:抽象類別是一個不完全的類,類裡面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進一步的專業化。但介面是一個行為的規範,裡面的所有東西都是抽象的!一個類只可以繼承一個基類也就是父類,但可以實現多個介面
7. net中讀寫資料庫需要用到哪些類?
Connection DataAdapter DataSet Command DataReader
8. 如何理解.net中的記憶體回收機制。
如果發現記憶體不夠,則記憶體回收行程,將全部對象作為無效對象(被回收對象),然後先將全域變數,static,處於活動中的局部變數,以及當前CG指標指向的對象放入一個表中.然後
會搜尋新列表中的對象所引用的對象.加入列表中,其他沒有被加入列表的對象都會被回收.
非託管對象要記得釋放資源就行了吧.
9. .net的錯誤處理機制是什麼
錯誤的處理順序:finally先,catch次之,最後退會try代碼..取消此次操作.返回catch中的異常資訊.當然,你也可以定製自己的錯誤處理機制...如果你的異常處理中包含finally塊.則此finally無論是否發生異常始終會被執行...
10. c#中using和new這兩個關鍵字有什麼意義?
using 的用途是為某個namespace建立別名,或者引用存在系統中的其它namespace.
New 用來建立執行個體,或者覆寫方法。
11. 談談類和結構的區別?
1. 實值型別與參考型別
結構是實值型別:實值型別在堆棧上分配地址
類是參考型別:參考型別在堆上分配地址
2.繼承性
結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然沒有明確sealed聲明,可結構是隱式的sealed .
類:完全可擴充的,除非顯式聲明sealed, 否則類可以繼承其他類和介面,自身也能被繼承 。
註:雖然結構不能被繼承 ,可結構能夠繼承介面,方法和類繼承介面一樣 。
3.內部結構的區別:
結構:
沒有預設的建構函式,可以添加建構函式
沒有解構函式
沒有 abstract 和 sealed(因為不能繼承)
不能有protected 修飾符
可以不用new 初始化
在結構中初始化執行個體欄位是錯誤的
類:
有預設的建構函式
有解構函式
可以使用 abstract 和 sealed
有protected 修飾符
必須使用new 初始化
12. 什麼是CLR?
通用語言執行平台(Common Language Runtime,CLR),提供了一個可靠而完善的多語言運行環境。CLR是一個軟體引擎,用於載入應用程式、檢查錯誤、進行安全許可認證、執行和清空記憶體。它屬於純動態運行時的一種,它的主要組成部分是虛擬執行引擎VEE(Virtual Execution Enging),它可以打破語言和平台的限制。
13. C#的優點是什嗎?至少列出4點
1. C#中指標已經消失. 允許對原始指標的有限制的使用.
2. 基於.NET平台的,繼承了自動記憶體管理和記憶體回收的特點.
3. C#擁有內建的支援來將任何組件轉換成一個web service,運行在任何平台上的任何應用程式都可以通過互連網來使用這個服務.
4. 物件導向的
14. 物件導向編程的三大原則是什嗎?分別加以說明。
繼承:都支援類的單一繼承,但類可以實現多個介面。所有類都從一個公用的基類繼承。
封裝與可見度:都可決定類成員是否可見。除了C#的internal存取修飾詞外,兩者可見度機制非常相似
多態性:Java和C#都支援某些形式的多態性機制,且兩者實現方法非常類似。
15. C#有哪5種類型的可訪問性?
public:成員可以從任何代碼訪問。
protected:成員只能從衍生類別訪問。
internal:成員只能從同一程式集的內部訪問。
protected internal:成員只能從同一程式集內的衍生類別訪問。
private:成員只能在當前類的內部訪問。
16. C#代碼在執行前要編譯為中繼語言,中繼語言的主要特徵有?
● 物件導向和使用介面
● 實值型別和參考型別之間的巨大差別
● 強資料類型
● 使用異常來處理錯誤
● 使用屬性(attribute)
17. C#中參考型別有哪幾種?
(類、代表、數組、介面)
18. 對象間可能存在的三種關係?
彙總,一個(較複雜的)對象由其他若干(較簡單的)對象作為其構成部分,稱作彙總。
關聯,對象之間的靜態聯絡(即通過對象屬性體現的聯絡)稱