C#訪(fǎng)問(wèn)修飾符詳細(xì)剖析
本文向大家介紹C#訪(fǎng)問(wèn)修飾符,可能好多人還不了解修飾符,沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
C#訪(fǎng)問(wèn)修飾符
C#訪(fǎng)問(wèn)修飾符與 Java 大致相同,我們將在這一部分介紹其中的一些細(xì)微差別。每個(gè)類(lèi)成員或類(lèi)本身都可以用C#訪(fǎng)問(wèn)修飾符進(jìn)行聲明,以定義許可訪(fǎng)問(wèn)的范圍。沒(méi)有在其他類(lèi)中聲明的類(lèi)只能指定 public 或 internal 修飾符,而嵌套的類(lèi)(如其他的類(lèi)成員)可以指定下面五個(gè)修飾符中的任何一個(gè):
◆public:對(duì)所有類(lèi)可見(jiàn)
◆protected:僅從派生類(lèi)中可見(jiàn)
◆private:僅在給定的類(lèi)中可見(jiàn)
◆internal:僅在相同的程序集中可見(jiàn)
◆protected internal:僅對(duì)當(dāng)前的程序集或從包含類(lèi)中派生的類(lèi)型可見(jiàn)
1.public、protected 和 private 修飾符
public 修飾符使得可以從類(lèi)內(nèi)外的任何地方訪(fǎng)問(wèn)成員。protected 修飾符表示訪(fǎng)問(wèn)僅限于包含類(lèi)或從它派生的類(lèi)。private 修飾符意味著只可能從包含類(lèi)型中進(jìn)行訪(fǎng)問(wèn)。
2.internal 修飾符
internal 項(xiàng)只可以在當(dāng)前的程序集中進(jìn)行訪(fǎng)問(wèn)。.NET 中的程序集大致等同于 Java 的 JAR 文件,它表示可以從中構(gòu)造其他程序的生成塊。
3.protected internal 修飾符
protected internal 項(xiàng)僅對(duì)當(dāng)前程序集或從包含類(lèi)派生的類(lèi)型可見(jiàn)。默認(rèn)C#訪(fǎng)問(wèn)修飾符是 private,而 Java 的默認(rèn)C#訪(fǎng)問(wèn)修飾符是包范圍。
4.sealed 修飾符
在其類(lèi)聲明中帶有 sealed 修飾符的類(lèi)可以認(rèn)為是與抽象類(lèi)完全相反的類(lèi):它不能被繼承。我們可以將一個(gè)類(lèi)標(biāo)記為 sealed,以防止其他類(lèi)重寫(xiě)它的功能。自然地,sealed 類(lèi)不能是抽象的。同時(shí)還需要注意,該結(jié)構(gòu)是隱式密封的;因此,它們不能被繼承。sealed 修飾符相當(dāng)于在 Java 中用 final 關(guān)鍵字標(biāo)記類(lèi)。
5.readonly 修飾符
要在 C# 中定義常量,我們可以使用 const 或 readonly 修飾符替換 Java 的 final 關(guān)鍵字。在 C# 中,這兩個(gè)修飾符之間的區(qū)別在于,const 項(xiàng)是在編譯時(shí)處理的,而 readonly 字段是在運(yùn)行時(shí)設(shè)置的。這可以允許我們修改用于在運(yùn)行時(shí)確定 readonly 字段值的表達(dá)式。
這意味著給 readonly 字段的賦值可以出現(xiàn)在類(lèi)構(gòu)造函數(shù)及聲明中。例如,下面的類(lèi)聲明了一個(gè)名為 IntegerVariable 的 readonly 變量,它是在類(lèi)構(gòu)造函數(shù)中初始化的:
- using System;
- public class ReadOnlyClass
- {
- private readonly int IntegerConstant;
- public ReadOnlyClass ()
- {
- IntegerConstant = 5;
- }
- // We get a compile time error if we try to set the value of the readonly
- //class variable outside of the constructor
- public int IntMember
- {
- set
- {
- IntegerConstant = value;
- }
- get
- {
- return IntegerConstant;
- }
- }
- public static void Main(string[] args)
- {
- ReadOnlyClass obj= new ReadOnlyClass();
- // We cannot perform this operation on a readonly field
- obj.IntMember = 100;
- Console.WriteLine("Value of IntegerConstant field is {0}",
- obj.IntMember);
- }
- }
【編輯推薦】