• ベストアンサー

C#のinternal修飾子について

こんにちは。 C#のinternal修飾子の意味が理解できません。 同じアサセンブリ内でのみ参照可能とは? 例を交えて教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

きちんとした説明になるかあやしいですが・・・。 型については、スコープはpublicかinternalがあります。 もしinternalがなかったとすると、すべての型がpublicになり、他のアセンブリからも参照できることになります。そうなると、その型を作成した人がアセンブリの中だけで使うために作ったとしても、自分の意図とは反して他のアセンブリ(exeファイルやdllファイル)から勝手に参照されてしまうことになります。すると、その型を作成した人が次のバージョンでその型でインタフェースの変更をしたとします。 もちろん、作成した人が内部用のものと考えていた場合その変更点を外部に通知したりもなければ、外部でそれを参照しているアセンブリの動作確認なんてするはずがありません。 そうなってくると、外部からそのアセンブリの型を参照したい人はそれが外部の人も使って良いものであるかどうかの判断がつかなくなります。まあ、明示的にドキュメントでも配布して、これこれのみ参照してくださいとあればいいのかもしれませんが、そうなってくるとアセンブリ一つについてドキュメントも一つということになりかねなくなりすごく繁雑になります。 そこでinternalの出番です。internalで修飾しておけば、外部に公開したくない型であるということで外部からはその型があることすら通常はわかりません。逆にpublicで修飾されていれば、外部の人は、これは参照してもよいものだという判断ができます。 internalは定義されているアセンブリの内部のみで使用なので、ある意味privateみたいな感じで理解されればよいかと思います。

f164ex2005
質問者

お礼

おぉ~ものすごくわかりやすい説明ありがとうございます。涙 お蔭様で理解できました!! ありがとうございます。

関連するQ&A