C#中的sealed修飾符的作用詳解
在 C# 中,sealed 修飾符的作用是 “密封” —— 用來阻止類被繼承,或者阻止方法/屬性在派生類中被重寫。
? 1.sealed用于類(class)
作用:
- 禁止其他類繼承這個類。
- 如果嘗試繼承一個
sealed類,編譯器會報錯。
示例:
public sealed class FinalClass
{
public void DoWork() { }
}
// ? 編譯錯誤!不能繼承 sealed 類
public class DerivedClass : FinalClass
{
}?? 常見用途:
- 設計上不希望被擴展的類(如工具類、值對象)
- 提高性能(JIT 編譯器對
sealed類有優(yōu)化)- .NET 中很多內置類型是
sealed的,比如string、DateTime
? 2.sealed用于方法或屬性(必須與 override 一起用)
作用:
- 允許當前類繼承并重寫父類的虛成員(
virtual或abstract),
但禁止它的子類再進一步重寫這個成員。
示例:
public class Base
{
public virtual void Say() => Console.WriteLine("Base");
}
public class Middle : Base
{
// 重寫 Say,并密封它
public sealed override void Say() => Console.WriteLine("Middle (sealed)");
}
public class Child : Middle
{
// ? 編譯錯誤!Say() 已被 sealed,不能再重寫
// public override void Say() { }
}?? 注意:
sealed修飾方法時,必須同時使用override- 不能直接對非虛方法加
sealed
?? 為什么使用sealed?
| 場景 | 原因 |
|---|---|
| 防止濫用繼承 | 有些類設計為“最終版本”,不希望被隨意擴展 |
| 安全性 | 避免子類破壞原有邏輯(尤其在庫開發(fā)中) |
| 性能優(yōu)化 | JIT 編譯器可以對 sealed 類做內聯(lián)等優(yōu)化 |
| 明確設計意圖 | 表達“這個類到此為止”的語義 |
?? 常見誤區(qū)
? 錯誤:以為 sealed 類不能有虛方法
? 正解:sealed 類可以有虛方法,但它自己不能被繼承,所以這些虛方法實際上也無法被重寫(因為沒子類)。
? 錯誤:sealed 方法可以單獨使用
? 正解:sealed 方法必須搭配 override,不能單獨修飾一個普通方法。
? 小結
| 用法 | 含義 |
|---|---|
sealed class MyClass | 該類不能被繼承 |
sealed override void MyMethod() | 該方法在當前類是最終版本,子類不能再重寫 |
?? 記住口訣:“sealed = 到此為止,不準再改”
如果你正在設計一個工具類(比如 MathHelper),并且確定不需要繼承,就可以把它聲明為 sealed:
public sealed class MathHelper
{
public static int Add(int a, int b) => a + b;
// 沒有實例成員,也不需要繼承 → 用 sealed 很合適
}問題
如何防止類被繼承?或者讓類繼承但是防止其某些方法被重寫?
使用sealed修飾符
到此這篇關于C#中的sealed修飾符的作用詳解的文章就介紹到這了,更多相關c# sealed修飾符內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#代碼實現(xiàn)將PDF轉換為PostScript(PS)格式
PostScript?是由?Adobe?Systems?在?20?世紀?80?年代開發(fā)的一種頁面描述語言,本文將介紹如何使用?Spire.PDF?for?.NET?以編程方式將?PDF?文件轉換為?PostScript(PS)文件,有需要的小伙伴可以了解下2026-03-03
c#使用ManagedWifi查看當前Wifi信號并選擇wifi的示例
這篇文章主要介紹了c#使用ManagedWifi查看當前Wifi信號并選擇wifi的示例,需要的朋友可以參考下2014-04-04
C#獲取真實IP地址(IP轉為長整形、判斷是否內網(wǎng)IP的方法)
這篇文章主要介紹了C#獲取真實IP地址的實現(xiàn)代碼,包含把IP轉為長整形、判斷是否是私網(wǎng)、內網(wǎng)IP的方法,需要的朋友可以參考下2014-08-08
C# winform 請求http的實現(xiàn)(get,post)
本文主要介紹了C# winform 請求http的實現(xiàn)(get,post),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06
WinForm實現(xiàn)多屏交互的實戰(zhàn)技巧和避坑指南
你是否遇到過這些問題窗體顯示在錯誤的屏幕、窗口位置被任務欄遮擋或者跨屏拖拽卡頓,本文將通過 3步核心流程、5大實戰(zhàn)技巧和10個高頻避坑指南,教你徹底掌握WinForm多屏交互開發(fā),讓窗體精準飛向副屏,需要的朋友可以參考下2025-09-09

