C#용 봉인된 한정자

3880 단어 csharp
今天想記錄 sealed (密封)修飾詞,它的定義很簡單,當你將 sealed應用到類別時, sealed修飾詞會防止其他類別繼承該類別,該類別則可繼承其它非 sealed 의제

Manager類別사용 sealed修飾詞, Manager類別可繼承 Employee類別, Employee類別不可繼承 Manager ,當然,任何類別都不可繼承 Manager
class Employee { }

sealed class Manager : Employee { }


所以사용 sealed修飾詞的類別不會有子類別,也不適合作為父類別使用,該類別也不可為抽象類別,因為 abstract類別提供可實作的方法或屬性,其他子類別必須繼承 abstract類別進行實作,所以當你將 sealedabstract一起使用時會產生錯誤



上圖錯誤清楚表示抽象類型不可以是密封或是靜態
sealed也可以使用在可覆寫父類別中的虛擬方法或屬性,該類別允許其他類別繼承,但可防止他們覆寫特定的虛擬方法或屬性

class X
{
    protected virtual void M1() { }
    protected virtual void M2() { }
}

class Y : X
{
    // sealed 可使用於可覆寫方法
    protected sealed override void M1() { }
    protected override void M2() { }
}

class Z : Y
{
    // 此時無法覆寫密封方法
    //protected override void M1() { }
    protected override void M2() { }
}


由於 Y類別覆寫了 M1方法並設置為 sealed ,所以當 Z類別繼承 Y類別時, Z類別將無法覆寫 M1方法,如果強制覆寫則會產生錯誤



需要特別注意的地方:不是所有方法都可做為密封方法,要作為密封方法的話,必須覆寫父類別的虛擬方法並實作該方法,所以在密封方法,所以在密封7 | 와 sealed修飾詞會同時使用

참조



sealed


글 읽어주셔서 감사합니다 🌷 🌻 🌼

마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
또는 내 GitHub
또는 커피를 사주세요 ⬇️ 감사합니다.

좋은 웹페이지 즐겨찾기