這幾天整理了一些常見的面試題,整理成一個系列給大家分享一下,機會是給有準備的人,面試造火箭,工作擰螺絲,不慌,共勉。 ...
上個月離職了,這幾天整理了一些常見的面試題,整理成一個系列給大家分享一下,機會是給有準備的人,面試造火箭,工作擰螺絲,不慌,共勉。
1.net必問的面試題系列之基本概念和語法
2.net必問的面試題系列之面向對象
3.net必問的面試題系列之設計模式
4.net必問的面試題系列之集合、異常、泛型
5.net必問的面試題系列之簡單演算法
6.net必問的面試題系列之資料庫
7.net必問的面試題系列之web前端
問題目錄
1.通常採用的訪問修飾符有哪五種
2.多態的理解
3.什麼是構造函數
4.重寫和重載的區別
5.class和struct的異同
6.構造函數是否能被重寫?
7.簡述一下麵向對象的三大特性
8.抽象類和介面有什麼區別?
9.類的執行順序
10.介面是否可繼承介面?抽象類是否可實現(implements)介面?抽象類是否可繼承實現類(concrete class)?
11.繼承最大的好處?
12.請說說引用和對象?
13.什麼是匿名類,有什麼好處
14.有哪些引用類型,有哪些值類型,有什麼區別
15.C#中有沒有靜態構造函數,如果有是做什麼用的?
16.怎樣理解靜態變數?靜態成員和非靜態成員的區別?
17.在項目中為什麼使用介面?介面的好處是什麼?什麼是面向介面開發?
18.屬性能在介面中聲明嗎?
19.什麼時候用重載?什麼時候用重寫?
20.靜態方法可以訪問非靜態變數嗎?如果不可以為什麼?
1.通常採用的訪問修飾符有哪五種
public:公開,訪問無限制
internal:本項目內可以訪問
internal protected:本項目的父子類可以訪問
protected:子類可以訪問
private:受保護的,只能在奔類中使用,對外完全封閉
2.多態的理解
解釋:同一操作作用於不同的對象,實現不同的結果。
作用:增強代碼的靈活性,重用性,可讀性
實現:通過派生類,覆寫基類的虛方法、重寫基類的override方法。
3.什麼是構造函數
概念:構造函數的方法名與類型相同、沒有返回類型
作用:完成對類的對象初始化
創建一個類的新對象時,系統會自動調用該構造函數初始化新對象,
如果沒有寫定義,那麼系統會自動提供一個不帶任何參數的public 構造函數
4.重寫和重載的區別
重寫方法:關鍵字用override修飾,派生類重寫基類的方法,方法命名、返回類型,參數必須相同,
重載方法:方法名必須相同,參數列表必須不相同,返回類型可以不相同。
作用:重寫主要是實現面向對象的多態性、重載主要是實現實例化不同的對象
5.class和struct的異同?
相同點:
1.都可以實現介面
不同點:
1.class是引用類型,struct是值類型
2.class允許繼承、被繼承,struct不允許,只能繼承介面
3.class可以初始化變數,struct不可以
4.class可以有無參的構造函數,struct不可以,必須是有參的構造函數,而且在有參的構造函數必須初始化所有成員
使用場景:
1.Class比較適合大的和複雜的數據,表現抽象和多級別的對象層次時。Struct適用於作為經常使用的一些數據組合成的新類型,表示諸如點、矩形等主要用來存儲數據的輕量級對象時,偏簡單值。
2.Struct有性能優勢,Class有面向對象的擴展優勢。
6.構造函數是否能被重寫?
構造器Constructor不能被繼承,因此不能重寫,但可以被重載
7.簡述一下麵向對象的三大特性
封裝、繼承、多態。
封裝:是通過把對象的屬性的實現細節隱藏起來,僅對外提供公共的訪問方法。
繼承:是通過子類繼承基類、繼承抽象類、繼承介面實現的。
多態:是通過重寫基類的override 方法、重寫虛方法實現的。
好處是,方便維護、易擴展。
缺點是:比面向過程性能低。
8.抽象類和介面有什麼區別?
相同點:都不能直接實例化
1.抽象類用abstract修飾、介面用interface修飾
2.抽象類中的方法可以實現,也可以不實現,有抽象方法的類一定要用abstract修飾,介面中的方法不允許實現
3.抽象類只能單繼承,介面支持多繼承
4.抽象類有構造方法,介面不能有構造方法
5.介面只負責功能的定義,通過介面來規範類的,(有哪些功能),而抽象類即負責功能的定義有可以實現功能(實現了哪些功能)
9.類的執行順序
執行順序:父類,子類,靜態塊,靜態欄位,非靜態塊,非靜態欄位,構造器,方法
10.介面是否可繼承介面?抽象類是否可實現(implements)介面?抽象類是否可繼承實現類(concrete class)?
介面可以繼承介面,抽象類可以實現介面,抽象類可以繼承實現類,但前提是實現類必須有明確的構造函數。
11.繼承最大的好處?
對父類成員進行重用,增加代碼的可讀性、靈活性。
12.請說說引用和對象?
對象和引用時分不開的,對象生成一個地址,放在堆裡面,引用則指向這個地址,放在棧裡面
13.什麼是匿名類,有什麼好處
不用定義、沒有名字的類,使用一次便可丟棄。好處是簡單、隨意、臨時的。
14.有哪些引用類型,有哪些值類型,有什麼區別
引用類型:類、介面、委托、字元串、數組
值類型:整形、浮點型、結構體、枚舉、bool
值類型和引用類型的區別在於,值類型的變數直接存放實際的數據,而引用類型的變數存放的則是數據的地址,即對象的引用。
預設值,值類型是0,引用類型null。
15.C#中有沒有靜態構造函數,如果有是做什麼用的?
有.
特點:
靜態構造函數既沒有訪問修飾符,也沒有參數。
在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
無法直接調用靜態構造函數。在程式中,用戶無法控制何時執行靜態構造函數。
用途:
當類使用日誌文件時,將使用這種構造函數嚮日志文件中寫入項。
16.怎樣理解靜態變數?靜態成員和非靜態成員的區別?
靜態變數屬於類,而不屬於對象;並對所有對象所享;靜態成員在加類的時候就被載入。
17.在項目中為什麼使用介面?介面的好處是什麼?什麼是面向介面開發?
介面是一種約束,描述類的公共方法/公共屬性,不能有任何的實現
好處是:結構清晰,類之間通信簡單易懂,擴展性好,提高復用性。
面向介面開發就是指面向抽象協議編程,實現者在實現時
18.屬性能在介面中聲明嗎?
可以,不能有訪問修飾符,不能初始化賦值。
19.什麼時候用重載?什麼時候用重寫?
當一個類需要用不同的實現來做同一件事情,此時應該用重寫,而重載是用不同的輸入做同一件事情
20.靜態方法可以訪問非靜態變數嗎?如果不可以為什麼?
靜態方法和非靜態變數不是同一生命周期,靜態方法屬於類,非靜態變數屬於具體的對象,靜態方法和具體的對象沒有任何關聯