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