1、virtual用于修飾方法、屬性、索引器或者事件聲明,并使它們可以在派生類(lèi)中被重寫(xiě)。virtual不能與static、abstract、private或者override修飾符一起使用。
聲明為virtual的方法被重寫(xiě)時(shí),派生類(lèi)中可以使用base關(guān)鍵字訪問(wèn)父類(lèi)中的publid,protected成員。語(yǔ)法:base.member
但base關(guān)鍵字不能跳過(guò)類(lèi)層次結(jié)構(gòu)中的多個(gè)層次,子類(lèi)不能訪問(wèn)祖父類(lèi)的成員。base.base.member是非法的
2、override要擴(kuò)展或者修改繼承的方法、屬性、索引器或事件的抽象實(shí)現(xiàn)或者虛擬實(shí)現(xiàn),必須使用override修飾符。
不能重寫(xiě)非虛方法或靜態(tài)方法。 重寫(xiě)的基方法必須是 virtual、abstract 或 override 的。
3、static使用它聲明屬于類(lèi)型本身而不是屬于特定的對(duì)象的靜態(tài)成員。static修飾符可以用于類(lèi)、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索引器、析構(gòu)函數(shù)或類(lèi)以外的類(lèi)型。
下面的類(lèi)聲明為 static,并且只包含 static 方法:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
常數(shù)或者類(lèi)型聲明隱式地是靜態(tài)成員。
不能通過(guò)實(shí)例引用靜態(tài)成員。 然而,可以通過(guò)類(lèi)型名稱(chēng)引用它。 例如,請(qǐng)考慮以下類(lèi):
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
若要引用靜態(tài)成員 x,請(qǐng)使用完全限定名 MyBaseC.MyStruct.x,除非可從相同范圍訪問(wèn)成員:
Console.WriteLine(MyBaseC.MyStruct.x);
盡管類(lèi)的實(shí)例包含該類(lèi)所有實(shí)例字段的單獨(dú)副本,但每個(gè)靜態(tài)字段只有一個(gè)副本。
不可以使用 this 來(lái)引用靜態(tài)方法或?qū)傩栽L問(wèn)器。
如果對(duì)類(lèi)應(yīng)用 static 關(guān)鍵字,則該類(lèi)的所有成員都必須是靜態(tài)的。
類(lèi)和靜態(tài)類(lèi)可以有靜態(tài)構(gòu)造函數(shù)。 靜態(tài)構(gòu)造函數(shù)在程序開(kāi)始和類(lèi)實(shí)例化之間的某個(gè)時(shí)刻調(diào)用。
4、abstract 修飾符指示所修飾的內(nèi)容缺少實(shí)現(xiàn)或未完全實(shí)現(xiàn)。 abstract 修飾符可用于類(lèi)、方法、屬性、索引器和事件。 在類(lèi)聲明中使用 abstract 修飾符以指示某個(gè)類(lèi)只能是其他類(lèi)的基類(lèi)。 標(biāo)記為抽象或包含在抽象類(lèi)中的成員必須通過(guò)從抽象類(lèi)派生的類(lèi)來(lái)實(shí)現(xiàn)。
本文摘自 :https://blog.51cto.com/u