public class _base
{
protected int x = 5;
protected int GetX(_base b) { return b.x; }
}
public class _derived : _base
{
public int Foo()
{
var b = new _base();
//return b.x; // <-- this would be illegal
return GetX(b); // <-- This works and does exactly the same as the line above
}
}
(コードを変更しないでください。それは働いて、問題を示している。)名前セマンティック
エラーは、bがであるためという
Cannot access protected member '_base.x' via a qualifier of type '_base'; the qualifier must be of type '_derived' (or derived from it)
注意です_baseとタイプし、私たちはベースにいません。プロテクトされたメンバーにはアクセスできません。なぜなら、_baseは他の派生型なので、コードを保護していない可能性がありますが、それは意味がありません。私がやっていることは、保護された特別な方法を使って上記の問題を回避することです。これは私が望む行動と私が望む保護を私に与えます。私は、このようなアクセスを許可するキーワードがあったと思いますが、そうではありません。私が興味を持っているのは、この "パターン"に名前があるかどうかです。
(私が使用している内部は、同じアセンブリのアクセスで誰でもできますので、保護された)
クラスクラッカーに似ています。 .netには内部スコープもあります。 – Neil
ノートここでやっていることは悪い考えだと思います。このようなニーズを避けるために、クラス階層を設計する方が良い方法があります。 – Neil
これを実現する方法を説明してください!これを可能にするC#にキーワードはありません。内部と友人は多くのアクセスに道を譲ります。保護は十分ではありません。私はクラス内のクラスのインスタンスの保護されたメンバにアクセスしたいので、標準のoopメソッドを使ってクラスを行う方法はないと思います。 (インターフェイスはすべてパブリックアクセスであり、私はそれを回避しようとしています) – AbstractDissonance