저는 건물에있는 라이브러리에서 다소 이상한 동작을 감지했습니다.개인 필드가있는 클래스 동작
나는이 방법이 있습니다
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"
을 제공을, 왜 그렇게되는지 이해가 안됩니다. 필드를 private로 선언했는데, 왜 한 클래스가 다른 클래스의 private 속성에 액세스 할 수 있으며 액세스 제한에 대한 예외를주지 않습니까?!
내 이해에 따라 Lib
은 자신의 필드에 액세스 할 수 있지만이 메서드에 Lib
의 다른 인스턴스를 지정하면 첫 번째 인스턴스가 초의 개인 필드에 액세스 할 수 없어야합니다. 다른 인스턴스와 개인이기 때문에 글쎄요!
_public 문자열이 아니어야합니다. _ 필드 문자열은 _private 문자열이어야합니다. –
아니요, 필드는 private이고 필드는 공용보기에서'field'에 액세스하는 데 사용할 수있는 접근 자입니다. 물론이 예에서 그것은별로 센을하지 않습니다. se, 왜냐하면 그냥'field'를 반환하기 때문입니다.하지만 거기에 논리를 추가하여'Field'에 접근 할 때받는 출력을 향상시킬 수 있습니다. some Reformatting or so) –