帶着問題去思考!大家好。
修飾符
修飾符有什麼作用呢?它是什麼東西呢?
首先修飾符有四種
- 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]
接口和抽象類是什麼?為什麼他們一起說?他們的共同點是什麼?又有什麼差別?
接口和抽象類非常相似,兩者都無法執行個體化,并且未實作部分都由派生類實作
差別:

抽象類的類體中可包含試的成員,而未實作的成員為抽象成員。抽象方法或屬性本事就是隐性的[1]virtual [ˈvɜːtʃuəl].是以派生類實作抽象方法或屬性必須使用override關鍵字。
繼承抽象類的類如果 沒有完全實作抽象成員, 仍然隻能是抽象類, 即派生的非抽象類必須完全實作抽象成員。 抽象類也可以實作接口, 這時抽象類必須實作所有的接口成員, 也可以将繼承的接口成員映射至抽象成員, 并由其派生類來實作。 說明: 抽象類的抽象成員不能使用 [1]virtual [ˈvɜːtʃuəl].或 static 修飾。
this和base有什麼作用?
this關鍵字用于引用類的目前 執行個體。 base 關鍵字用于派生類通路基類成員。
堆和棧
棧指堆棧,堆指托管堆。兩者是程式可用記憶體的兩個區域,其中堆棧可用于存儲非執行個體成員的值類型資料, 以及引用類型的變量( 用于存儲引用類型執行個體), 而托管堆可用于 存儲引用類型執行個體的資料及相關資訊。不但存儲内容不同, 堆棧和托管堆的記憶體配置設定方式也不同。
- 一般我們不需要管記憶體管理,因為有CLR.
- 堆棧和托管堆用于存儲. NET程式中的值類型和引用 類型 資料。 程式代碼中聲明一個值類型變量 時, CLR 直接在堆棧中配置設定可用的的空間給該變量。 當代碼中聲明一個引用 類型 的 變量 時, 該變量隻是一個指向 null 的 空 引用, 并且該用同樣存儲在堆棧上。
- 如果使用 new 運算符 建立 引用 類型 的 執行個體 時, CLR 将在托管堆中配置設定可用的空間給該執行個體, 這個 執行個體 無法 直接 通路。一般 将 用 new 建立 的 執行個體 指派 給 某個 引用 類型的變量 時, 該變量将儲存指向這個執行個體的記憶體 位址。 由此可知, 堆棧和托管堆是程式 可用記憶體空間的兩個 區域。 堆棧可用于存儲非對象的值類型資料和引用類 執行個體 的位址引用, 而托管堆可用于存儲 由 new 建立 的 引用類型執行個體, 引用 類型 變量 可 存儲 執行個體 的 位址 引用, 以達到通路執行個體的目的。
- 不過堆棧的資料清除和托管堆的資料清除有很大的不同, 堆棧的值類型資料在超出作用域時将被清除。 而 托管 堆 中的 執行個體 隻有 在 沒有 被 任何 變量 引用 時, 才可 能在 未來 某個 時間 被 清除, 托管堆的資料清除 交給垃圾收集器( GC) 完成。
Sealed修飾符
sealed [sild]
密封類一般情況下的使用方法和其他類一樣,隻是無法被繼承,密封類可用于單一功能的實作,防止被意外地繼承。
sealed修飾符執行個體方法和屬性,必須和override一起使用。
靜态類和靜态成員
當類中某些成員不需要建立執行個體實作,可将其聲明為靜态類成員。靜态成員通路類名而非對象名,this 關鍵字也無法通路靜态成員時直接引用,這些成員可用作該類的多個對象共享資料。
靜态類無法new建立對象,是以不能編寫構造函數。