1. ホーム
  2. c#

[解決済み] どんな時に、どんな理由で、授業を封印するのか?

2022-11-09 07:07:08

質問

C# と C++/CLI では、キーワード sealed (または NotInheritable は、クラスを継承の機会から保護するために使用されます(クラスは非継承になります)。オブジェクト指向の特徴のひとつに継承があることは知っていますが、そのために sealed の使用はこの特徴に反しており、継承を停止させてしまいます。 この sealed の利点と、それを使うことが重要である場合を示す例はありますか?

どのように解決するのですか?

  1. セキュリティ機能を実装したクラスで、元のオブジェクトが "impersonated"できないようにします。

  2. より一般的には、私は最近 Microsoft の担当者とやり取りをしましたが、その担当者は、継承を放置するとパフォーマンス的に高くつくので、本当に完全に意味のある場所に限定するようにしていると話していました。

    sealed キーワードは、CLR に対して、メソッドを探すためにさらに下のクラスが存在しないことを伝え、物事を高速化します。

現在市販されているほとんどのパフォーマンス向上ツールでは、継承されていないすべてのクラスを密封するチェックボックスを見つけることができます。

しかし、MEF を通してプラグインまたはアセンブリの検出を許可したい場合、問題にぶつかるので、注意してください。