1. 程式人生 > >.net必問的面試題系列之面向物件

.net必問的面試題系列之面向物件

上個月離職了,這幾天整理了一些常見的面試題,整理成一個系列給大家分享一下,機會是給有準備的人,面試造火箭,工作擰螺絲,不慌,共勉。
1.net必問的面試題系列之基本概念和語法
2.net必問的面試題系列之面向物件
3.net必問的面試題系列之設計模式
4.net必問的面試題系列之集合、異常、泛型
5.net必問的面試題系列之簡單演算法
6.net必問的面試題系列之資料庫
7.net必問的面試題系列之web前端

1.通常採用的訪問修飾符有哪五種

public:公開,訪問無限制
internal:本專案內可以訪問
internal protected:本專案的父子類可以訪問
protected:子類可以訪問
private:受保護的,只能在奔類中使用,對外完全封閉

2.多型的理解

解釋:同一操作作用於不同的物件,實現不同的結果。
作用:增強程式碼的靈活性,重用性,可讀性
實現:通過派生類,覆寫基類的虛方法、重寫基類的override方法。

3.什麼是建構函式

概念:建構函式的方法名與型別相同、沒有返回型別
作用:完成對類的物件初始化
建立一個類的新物件時,系統會自動呼叫該建構函式初始化新物件,
如果沒有寫定義,那麼系統會自動提供一個不帶任何引數的public 建構函式

4.重寫和過載的區別

重寫方法:關鍵字用override修飾,派生類重寫基類的方法,方法命名、返回型別,引數必須相同,
過載方法:方法名必須相同,引數列表必須不相同,返回型別可以不相同。
作用:重寫主要是實現面向物件的多型性、過載主要是實現例項化不同的物件

5.class和struct的異同?

相同點:
1.都可以實現介面

  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.在專案中為什麼使用介面?介面的好處是什麼?什麼是面向介面開發?

    介面是一種約束,描述類的公共方法/公共屬性,不能有任何的實現
    好處是:結構清晰,類之間通訊簡單易懂,擴充套件性好,提高複用性。
    面向介面開發就是指面向抽象協議程式設計,實現者在實現時