いもづる オブジェクト指向

internal で不必要な公開を防ぐ

DLL作成の際、public class ばかリ作っていませんか? internal を有効に使い、外部に公開するクラスと公開しないクラスを明確に区別しましょう。

1つのDLL(クラスライブラリ)を例にします。このプロジェクトの中に次のように5つのクラスが存在するとします。

  1. ClassPublicA・・・公開クラス
  2. ClassPublicB・・・公開クラス
  3. ClassInternalA・・・DLL内部でのみ使用するクラス
  4. ClassInternalB・・・DLL内部でのみ使用するクラス
  5. ClassInternalC・・・DLL内部でのみ使用するクラス

これらのクラスのアクセシビリティの設定でどのように変わるでしょうか。

  全て public internal を適切に使用
アクセシビリティ設定
  • public ClassPublicA
  • public ClassPublicB
  • public ClassInternalA
  • public ClassInternalB
  • public ClassInternalC
  • public ClassPublicA
  • public ClassPublicB
  • internal ClassInternalA
  • internal ClassInternalB
  • internal ClassInternalC
DLL外部からアクセス可能なクラス
  • ClassPublicA
  • ClassPublicB
  • ClassInternalA
  • ClassInternalB
  • ClassInternalC
  • ClassPublicA
  • ClassPublicB
DLL使用時の
VS.NET IDE 補完イメージ
全てpublic 補完イメージ internalを使用 補完イメージ
DLL使用者の思い 5クラス提供されている・・
ClassInternalx って何だ??
何事もなく使用・・
結論 ×

このように internal を使用することで意図してクラスの隠蔽が可能です。
不要なクラスが公開されていると、開発者(DLL使用者)の誤使用、とまどいの元となります。
後で internal に変更すると、既に誰かが定義してしまっていてビルドエラー発生!ということにもなりかねません。 提供者は、常にクラスを利用する側のことを考え、最善の形で提供する必要があります。

公開するクラスは public、それ以外は全て internal でいいでしょう。

 

webmaster@e-ioo.net