C#/friendクラスの代替案 のバックアップ差分(No.1)
更新- 追加された行はこの色です。
- 削除された行はこの色です。
[[公開メモ]] * friend クラスとは [#t75f84fc] 密接に関連する2つのクラス、ClassA と ClassB とがあったとき、 他のクラスには公開しないが、お互いの間でのみ公開したいメソッドを 実装したくなる事が多々あります。 C++だとこのようなときに、お互いを friend クラスとして宣言することで、 外から見ると private なメソッドに自由にアクセスすることができるようになります。 * C# では [#med36db1] C# では friend はありません。 代わりに internal というのがあるのですが、friend に比べて公開される範囲が広すぎて 完全に代替とすることができないところです。 こういう場合、インターフェースを使うと、friend に似た効果を得られる事に気づきました。 当たり前の事なのかもしれませんが、不思議と他で同様の記事を発見できなかったので、 一応ここにメモしておきます。 public class ClassA: B.IClassA { void B.IClassA.privateMemberForClassB() { // このメンバーは private } } public class B { internal interface IClassA { void privateMemberForClassB(); } public AccessToPrivate(ClassA a) { // キャストしたときだけ操作できる ( (IClassA)a ).privateMemberForClassB(); } } もちろん、同じアセンブリ内で、わざわざ a を B.IClassA にキャストするコードを 書けば該当コードにアクセスできてしまいますが、間違って呼び出してしまうとか、 インテリセンスを汚してしまうとか、そういった問題はこの方法で回避できると思います。
Counter: 46260 (from 2010/06/03),
today: 1,
yesterday: 9