私が構築しているライブラリで、(少なくとも私にとっては)やや奇妙な振る舞いをしました。
私はこの方法を持っています:
public class Lib
{
private string field = "field";
public string Field
{
get
{
return field;
}
}
public void Add(Lib lib)
{
string field = DoSomething(lib);
Console.WriteLine(field);
}
protected string DoSomething(Lib lib)
{
return lib.field;
}
}
したがって、ライブラリを使用するプログラムからメソッドを呼び出すと、次のようになります。
Lib lib = new Lib();
Lib lib2 = new Lib();
lib.Add(lib2);
コンソールは私"field"
を出力として提供します...今、私はそれがなぜ起こるのかよくわかりません。フィールドをプライベートとして宣言したのに、なぜ1つのクラスが他のクラスのプライベートプロパティにアクセスでき、アクセス制限に関する例外が発生しないのですか?!
私の理解では、aLib
はとにかくそれ自体のフィールドにアクセスできますが、メソッドに他のインスタンスをLib
指定すると、最初のインスタンスが秒のプライベートフィールドにアクセスできないようにする必要があります。インスタンスとプライベート!