C# 修飾符
修飾符用於限定類型以及類型成員的申明,C#中的修飾符按功能可分為四部分:屬性修飾符,存取修飾符,類修飾符和成員修飾符。
屬性修飾符:
[Serializable]:按值將對象封送到遠程服務器。在按值封送對象時,就會創建一個該對象的副本,並將其序列化傳送到服務器。 任何對該對象的方法調用都是在服務器上進行的。
[STAThread]:是Single-Threaded Apartment單線程套間的意思,是一種線程模型(線程模式用於處理組件在多線程的環境裡並行與並互的方式),套間線程(STAThread)模式中接口跨線程傳遞必須被調度(Marshal),不調度直傳肯定會失敗!而MTA或FreeThread模式中的接口可以不經調度直接傳遞。這種調度在特定的環境中非常影響性能(可有幾百倍之差)。如VB裡只支持STAThread模式。FreeThread模式的組件會在裡面表現成和跨進程一樣慢!線程模式是微軟的COM基礎中的極其重要的概念。一定要吃透!
[MTAThread]:是MultiThreaded Apartment多線程套間的意思,同上也是一種線程模型。
存取修飾符:
public:存取不受限制。
private:只有包含該成員的類可以存取。
internal:只有當前工程可以存取。引用dll後也是無法顯示的
protected:只有包含該成員的類以及派生類可以存取。方法使用此修飾符後 必須繼承此方法所屬的類。只能使用派生類 調用
如:
class BaseTest
{
public int a = 10;
protected int b = 2;
}
class ChildTest : BaseTest
{
int c;
int d;
static void Main(string[] args)
{
BaseTest basetest = new BaseTest();
ChildTest childTest = new ChildTest();
Console.WriteLine(childTest.b);
}
}
類修飾符:
abstract:抽象類。指示一個類只能作為其它類的基類。 不能被實例化 new
sealed:密封類。指示一個類不能被繼承。理所當然,密封類不能同時又是抽象類,因為抽象總是希望被繼承的。
成員修飾符:
abstract:指示該方法或屬性沒有實現。繼承所在類的派生類 必須重寫此方法
sealed:密封方法。可以防止在派生類中對該方法的override(重載)。不是類的每個成員方法都可以作為密封方法密封方法,必須對基類的虛方法進行重載,提供具體的實現方法。所以,在方法的聲明中,sealed修飾符總是和override修飾符同時使用。
delegate:委托。用來定義一個函數指針。C#中的事件驅動是基於delegate + event的。
const:指定該成員的值只讀不允許修改。
event:聲明一個事件。
extern:指示方法在外部實現。
override:重寫。對由基類繼承成員的新實現。
readonly:指示一個域只能在聲明時以及相同類的內部被賦值。
static:指示一個成員屬於類型本身,而不是屬於特定的對象。即在定義後可不經實例化,就可使用。
virtual:指示一個方法或存取器的實現可以在繼承類中被覆蓋。
new:在派生類中隱藏指定的基類成員,從而實現重寫的功能。 若要隱藏繼承類的成員,請使用相同名稱在派生類中聲明該成員,並用 new 修飾符修飾它。