[.net 面向對象編程基礎] (8) 基礎中的基礎——修飾符html
在進入C#面向對象核心以前,咱們須要先對修飾符有所瞭解,其實咱們在前面說到變量和常量的時候,已經使用了修飾符,而且說明了變量和常量的修改符。編程
首先 修飾符是什麼?ide
修飾符用於限定類型以及類型成員的申明函數
從定義能夠看出按功能分爲兩類:訪問修飾符和聲明修飾符編碼
1.訪問修飾符 (5個)spa
訪問修飾符.net |
說明htm |
public對象 |
公有訪問。不受任何限制。blog |
private |
私有訪問。只限於本類成員訪問,子類,實例都不能訪問。 |
protected |
保護訪問。只限於本類和子類訪問,實例不能訪問。 |
internal |
內部訪問。只限於本項目內訪問,其餘不能訪問。 |
protected internal |
內部保護訪問。只限於本項目或是子類訪問,其餘不能訪問 |
C#成員類型的可修飾及默認修飾符以下表:
成員類型 |
默認修飾符 |
可被修飾符 |
enum |
public |
none |
class |
private |
public、protected、internal、private、 |
interface |
public |
none |
struct |
private |
public、internal、private |
2.聲明修飾符 (10個)
Partial:在整個同一程序集中定義分部類和結構
Static: 聲明屬於類型自己而不是屬於特定對象的成員。
Abstract:抽象類,只能是其餘類的基類。類中的方法只聲明不實現,方法的實如今他的派生類中完成。
Sealed:指定類不能被繼承。
Virtual:用於修飾方法、屬性、索引器或事件聲明,而且容許在派生類中重寫這些對象
Override:提供從基類繼承的成員的新實現
New:做修飾符,隱藏從基類成員繼承的成員,在不使用 new 修飾符的狀況下隱藏成員是容許的,但會生成警告。做運算符,用於建立對象和調用構造函數。
Extern:用於聲明在外部實現的方法。 extern 修飾符的常見用法是在使用 Interop 服務調入非託管代碼時與 DllImport 特性一塊兒使用。 在這種狀況下,還必須將方法聲明爲 static
Readonly:修飾字段,表示該字段爲只讀字段。
注意:readonly修飾引用類型時因爲操做不當可能修改該只讀對象狀態。例如:Readonly List< Person> persons=….;
咱們可能在某些地方對persons 進行了修改:persons.add(new Person());
Const:修飾字段,表示該字段爲只讀字段。而且在編譯時必須可以明確知道該字段的值,其值是硬編碼到程序中去的,修改了該類型成員後須要從新編譯才能使修改生效。
而readonly是運行時只讀,內容在運行時肯定,因此修改了readonly類型成員後無需從新編譯便可生效。
Readonly不能修飾局部變量,const能夠。
要點:
Virtual,override和new 的區別
virtual 用於父類中,聲明某方法能夠重寫,該方法不能是static;
override(覆蓋繼承) 用於子類中,重寫父類中用virtual/override/abstract關鍵字聲明的方法;
new(隱藏繼承) 用於子類中,可修飾父類中有或無virtual聲明的方法;
若是在父類中有與父類同名同參的方法時,C#會隱式在子類前添加一個new關鍵字。
【區別】override與new
當將一個子類實例賦值給父類實例,在子類實例與父類實例中分別調用該方法時:使用override修飾的都將調用子類方法,而使用new修飾的會分別調用子類方法和父類方法。
New和Override這兩個關鍵字是互斥的。不能夠同時使用。
【區別】virtual與abstract
virtual:用於父類中聲明該方法可被重寫。
abstract:只能用在抽象類中聲明抽象方法,自己不能實現任何功能(所以必須在子類中override),不能實例化。
二者除了在子類中一樣能夠用override重寫這個相同點以外,沒有其餘關係。
==============================================================================================
返回目錄
<若是對你有幫助,記得點一下推薦哦,有不明白的地方或寫的不對的地方,請多交流>
==============================================================================================