天天看點

.NET 基礎知識

帶着問題去思考!大家好。

修飾符

修飾符有什麼作用呢?它是什麼東西呢?

首先修飾符有四種

  • private[ˈpraɪvət]   
  • protected [prə'tektɪd]  
  • internal [ɪnˈtɜːnl]
  • public [ˈpʌblɪk] 

他們的特效依次是:

private   修飾符用于設定類或類成員的通路權限僅為所屬類的内部, private也被稱為私有修飾符。某些時候需要通路私有類成員時,可通過 get 和 set 通路器讀取或修改。

protected    修飾符用于設定類或類成員的通路權限僅為所屬類及子類的内部.

internal     修飾符修飾的類或類成員的通路權限為同一程式集内部,C# 預設的類通路修飾符即為 internal。

面向對象程式設計的特征之一就是封裝性, 而類就是封裝性的典型展現。在生活中,人們不需要知道電器的内部構造, 但是能很容易地使用電器, 這就是封裝性。 在項目中需要編寫很多功能類, 在程式運作時隻需要使用類所提供的功能, 大部分類内部的代碼 實作 需要封裝, 拒絕外部通路。 這樣大大增加了類的内部代碼 安全性和穩定性, 同時多個功能類之間也減少了互相幹擾的可能。 通路權限修飾符即可将類及類的成員劃分多種 安全 級别, 根據 不同 需要 設定 通路 權限。 internal 和 public 通路 修飾符是需要謹慎選擇的, 多數情況下應該盡量使用 internal 通路修飾符。 還有 一種 通路 修飾 符,

即 protected internal 修飾符, 可在子類中或同一程式集内被通路。如果要聲明成員隻能被同一 程式集内的派生(子類)通路, 則應首先設定 所屬類為 internal,成員設定 為 protected。

方法的重載和重寫(override)

 重載和重寫的差別?

重載是方法的名稱相同, 函數簽名不同, 進行多次重載以适應不同的需要。 而重寫( override) 是進行基類中函數的擴充或改寫

值類型和引用類型

他們的差別是什麼?

值類型包含資料,引用類型變量隻包含資料的記憶體位址。值類型隻要離開其定義的作用域,将從記憶體中消除,而引用類型引用的對象一直存留在托管堆

接口和抽象類 

interface abstract [ˈæbstrækt] 

接口和抽象類是什麼?為什麼他們一起說?他們的共同點是什麼?又有什麼差別?

接口和抽象類非常相似,兩者都無法執行個體化,并且未實作部分都由派生類實作

差別:

.NET 基礎知識

抽象類的類體中可包含試的成員,而未實作的成員為抽象成員。抽象方法或屬性本事就是隐性的[1]virtual [ˈvɜːtʃuəl].是以派生類實作抽象方法或屬性必須使用override關鍵字。

繼承抽象類的類如果 沒有完全實作抽象成員, 仍然隻能是抽象類, 即派生的非抽象類必須完全實作抽象成員。 抽象類也可以實作接口, 這時抽象類必須實作所有的接口成員, 也可以将繼承的接口成員映射至抽象成員, 并由其派生類來實作。 說明: 抽象類的抽象成員不能使用 [1]virtual [ˈvɜːtʃuəl].或 static 修飾。

this和base有什麼作用?

this關鍵字用于引用類的目前 執行個體。 base 關鍵字用于派生類通路基類成員。

堆和棧

棧指堆棧,堆指托管堆。兩者是程式可用記憶體的兩個區域,其中堆棧可用于存儲非執行個體成員的值類型資料, 以及引用類型的變量( 用于存儲引用類型執行個體), 而托管堆可用于 存儲引用類型執行個體的資料及相關資訊。不但存儲内容不同, 堆棧和托管堆的記憶體配置設定方式也不同。

.NET 基礎知識
.NET 基礎知識
  1.  一般我們不需要管記憶體管理,因為有CLR.
  2. 堆棧和托管堆用于存儲. NET程式中的值類型和引用 類型 資料。 程式代碼中聲明一個值類型變量 時, CLR 直接在堆棧中配置設定可用的的空間給該變量。 當代碼中聲明一個引用 類型 的 變量 時, 該變量隻是一個指向 null 的 空 引用, 并且該用同樣存儲在堆棧上。
  3. 如果使用 new 運算符 建立 引用 類型 的 執行個體 時, CLR 将在托管堆中配置設定可用的空間給該執行個體, 這個 執行個體 無法 直接 通路。一般 将 用 new 建立 的 執行個體 指派 給 某個 引用 類型的變量 時, 該變量将儲存指向這個執行個體的記憶體 位址。 由此可知, 堆棧和托管堆是程式 可用記憶體空間的兩個 區域。 堆棧可用于存儲非對象的值類型資料和引用類 執行個體 的位址引用, 而托管堆可用于存儲 由 new 建立 的 引用類型執行個體, 引用 類型 變量 可 存儲 執行個體 的 位址 引用, 以達到通路執行個體的目的。
  4. 不過堆棧的資料清除和托管堆的資料清除有很大的不同, 堆棧的值類型資料在超出作用域時将被清除。 而 托管 堆 中的 執行個體 隻有 在 沒有 被 任何 變量 引用 時, 才可 能在 未來 某個 時間 被 清除, 托管堆的資料清除 交給垃圾收集器( GC) 完成。

 Sealed修飾符

 sealed [sild]

密封類一般情況下的使用方法和其他類一樣,隻是無法被繼承,密封類可用于單一功能的實作,防止被意外地繼承。

sealed修飾符執行個體方法和屬性,必須和override一起使用。

靜态類和靜态成員

當類中某些成員不需要建立執行個體實作,可将其聲明為靜态類成員。靜态成員通路類名而非對象名,this 關鍵字也無法通路靜态成員時直接引用,這些成員可用作該類的多個對象共享資料。

靜态類無法new建立對象,是以不能編寫構造函數。

.NET 基礎知識