[.net 面向對象編程基礎] (8) 基礎中的基礎——修飾符


[.net 面向對象編程基礎] (8) 基礎中的基礎——修飾符

 

    在進入C#面向對象核心之前,我們需要先對修飾符有所了解,其實我們在前面說到變量和常量的時候,已經使用了修飾符,並且說明了變量和常量的修改符。

   首先 修飾符是什么?

    修飾符用於限定類型以及類型成員的申明

    從定義可以看出按功能分為兩類:訪問修飾符和聲明修飾符

1.訪問修飾符 (5個)

訪問修飾符

說明

public

公有訪問。不受任何限制。

private

私有訪問。只限於本類成員訪問,子類,實例都不能訪問。

protected

保護訪問。只限於本類和子類訪問,實例不能訪問。

internal

內部訪問。只限於本項目內訪問,其他不能訪問。

protected internal

內部保護訪問。只限於本項目或是子類訪問,其他不能訪問

    C#成員類型的可修飾及默認修飾符如下表:

成員類型

默認修飾符

可被修飾符

enum

public

none

class

private

publicprotectedinternalprivate 
protected internal

interface

public

none

struct

private

publicinternalprivate

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關鍵字。 

【區別】overridenew

  當將一個子類實例賦值給父類實例,在子類實例與父類實例中分別調用該方法時:使用override修飾的都將調用子類方法,而使用new修飾的會分別調用子類方法和父類方法。

  NewOverride這兩個關鍵字是互斥的。不可以同時使用。  

【區別】virtualabstract

  virtual:用於父類中聲明該方法可被重寫。

  abstract:只能用在抽象類中聲明抽象方法,本身不能實現任何功能(因此必須在子類中override),不能實例化。

  兩者除了在子類中同樣可以用override重寫這個相同點之外,沒有其他關系。 

 

==============================================================================================

返回目錄

 <如果對你有幫助,記得點一下推薦哦,有不明白的地方或寫的不對的地方,請多交流>

============================================================================================== 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM