C# sealed 關鍵字介紹

sealed 關鍵字最主要的目的就是防止類別被繼承,常用在 DTO 等確定不會被繼承的類別上。

用法:
    
public sealed class UserDataDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}
    

如果在抽象類別上使用 sealed 時會拋出下面錯誤:
    
Class 'RuyutTest.Dto.UserDataDto' cannot be both 'abstract' and 'sealed'
    

有個 Youtube 影片在測試有無加上 sealed 關鍵字的性能差距,建立物件速度有可能差距到 20 倍(0.0115 ns 和 0.0057 ns),但其實時間小到可以忽略不計。

有些語言預設是無法被繼承,也有許多人在討論 C# 類別預設是否該是 sealed,不過最有差別的應該就是在第三方類別庫上面了。假設安裝了一個第三方類別庫,他的功能很強大,但是無法被繼承,自己不能自訂類別來修改,應該會非常的痛苦。

參考資料:
Why aren't classes sealed by default?
Why all your classes should be sealed by default in C#

留言