.net程序員面試問題分享
1. new 關鍵字用法
(1)new 運算符
用於創建對象和調用構造函數。
(2)new 修飾符
用於向基類成員隱藏繼承成員。
(3)new 約束
用於在泛型聲明中約束可能用作類型參數的參數的類型。
2.如何把一個Array複製到ArrayList裏
(1) 實現1
string[] s ={ "111", "22222" };
ArrayList list = new ArrayList();
list.AddRange(s);
(2)實現2
string[] s ={ "111", "22222" };
ArrayList list = new ArrayList(s);
3.DataGrid的Datasouse可以連接什麼數據源
DataTable
DataView
DataSet
DataViewManager
任何實現IListSource接口的組件
任何實現IList接口的組件
4.概述反射和序列化
反射
公共語言執行庫加載器管理應用程序域。這種管理包括將每個程序集加載到相應的應用程序域以及控制每個程序集中類型層次結構的內存佈局。
程序集包含模組,而模組包含類型,類型又包含成員。反射則提供了封裝程序集、模組和類型的對象。您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然後,可以調用類型的方法或訪問其字段和屬性。
序列化
序列化是將對象狀態轉換爲可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換爲對象。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據。
5.概述O/R Mapping 的原理
利用反射,配置將對象和數據庫表映射。
6. 可訪問性級別有哪幾種
public 訪問不受限制。
protected 訪問僅限於包含類或從包含類派生的類型。
internal 訪問僅限於當前程序集。
protected internal 訪問僅限於從包含類派生的當前程序集或類型。
private 訪問僅限於包含類型。
7. sealed 修飾符有什麼特點
sealed 修飾符可以應用於類、實例方法和屬性。密封類不能被繼承。密封方法會重寫基類中的方法,但其本身不能在任何派生類中進一步重寫。當應用於方法或屬性時,sealed 修飾符必須始終與 override一起使用。
8.列舉ADO.NET中的共享類和數據庫特定類
共享類
DataSet
DataTable
DataRow
DataColumn
DataRelation
Constraint
DataColumnMapping
DataTableMapping
特定類
(x)Connection
(x)Command
(x)CommandBuilder
(x)DataAdapter
(x)DataReader
(x)Parameter
(x)Transaction
9.執行下面代碼後:
String strTemp ="abcdefg 某某某";
Int i=System.Text.Encoding.Default.GetBytes(strTemp).Length;
Int j=strTemp.Length;
問:
i=?
j=?
i=(14 ) ;j=(11 ) 中文兩個字節
10.C#中,string str = null 與 string str ="",請儘量用文字說明區別。
string str =""初始化對象分配空間
而string str=null初始化對象
11.詳述.NET裏class和struct的異同
結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多:
儘管結構的靜態字段可以初始化,結構實例字段聲明還是不能使用初始值設定項。
結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。
結構的副本由編譯器自動創建和銷燬,因此不需要使用默認構造函數和析構函數。實際上,編譯器透過爲所有字段賦予默認值(參見默認值表)來實現默認構造函數。結構不能從類或其他結構繼承。
結構是值類型 -- 如果從結構創建一個對象並將該對象賦給某個變量,變量則包含結構的全部值。複製包含結構的變量時,將複製所有數據,對新副本所做的任何修改都不會改變舊副本的數據。由於結構不使用引用,因此結構沒有標識 -- 具有相同數據的兩個值類型實例是無法區分的。C# 中的所有值類型本質上都繼承自 ValueType,後者繼承自 Object。
編譯器可以在一個稱爲裝箱的過程中將值類型轉換爲引用類型。
結構具有以下特點:
結構是值類型,而類是引用類型。
向方法傳遞結構時,結構是透過傳值方式傳遞的,而不是作爲引用傳遞的。
與類不同,結構的實例化可以不使用 new 運算符。
結構可以聲明構造函數,但它們必須帶參數。
一個結構不能從另一個結構或類繼承,而且不能作爲一個類的基。所有結構都直接繼承自 System.ValueType,後者繼承自 System.Object。
結構可以實現接口。
在結構中初始化實例字段是錯誤的。
12.什麼叫應用程序域?什麼是託管代碼?什麼是強類型系統?什麼是裝箱和拆箱?什麼是重載?CTS、CLS和CLR分別作何解釋?
應用程序域
應用程序域爲安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。應用程序域通常由執行庫宿主創建,執行庫宿主負責在執行應用程序之前引導公共語言執行庫。應用程序域提供了一個更安全、用途更廣的處理單元,公共語言執行庫可使用該單元提供應用程序之間的隔離。
託管代碼
使用基於公共語言執行庫的語言編譯器開發的代碼稱爲託管代碼;託管代碼具有許多優點,例如:跨語言集成、跨語言異常處理、增強的安全性、版本控制和部署支援、簡化的組件交互模型、調試和分析服務等。
裝箱和拆箱
裝箱和拆箱使值類型能夠被視爲對象。對值類型裝箱將把該值類型打包到 Object 引用類型的一個實例中。這使得值類型可以存儲於垃圾回收堆中。拆箱將從對象中提取值類型。
重載
每個類型成員都有一個唯一的簽名。方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。只要簽名不同,就可以在一種類型內定義具有相同名稱的多種方法。當定義兩種或多種具有相同名稱的方法時,就稱作重載。
CTS通用類型系統 (common type system)
一種確定公共語言執行庫如何定義、使用和管理類型的規範。
CLR公共語言執行庫
.NET Framework 提供了一個稱爲公共語言執行庫的執行時環境,它執行代碼並提供使開發過程更輕鬆的服務。
CLS公共語言規範
要和其他對象完全交互,而不管這些對象是以何種語言實現的,對象必須只向調用方公開那些它們必須與之互用的所有語言的通用功能。爲此定義了公共語言規範 (CLS),它是許多應用程序所需的一套基本語言功能。
強類型
C# 是強類型語言;因此每個變量和對象都必須具有聲明類型。