【发布时间】:2009-12-02 07:48:47
【问题描述】:
在我正在建立的图书馆中,我遇到了一些(至少对我而言)奇怪的行为;
我有这个方法:
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" 作为输出...现在,我不太明白为什么会发生这种情况。我将该字段声明为私有,那么为什么一个类可以访问其他类的私有属性并且它没有给我关于访问限制的异常?!
在我的理解中,Lib 无论如何都可以访问它自己的字段,但是当我给该方法提供Lib 的另一个实例时,第一个实例应该不可能访问秒的私有字段,因为...好吧,因为它是另一个实例并且是私有的!
【问题讨论】:
-
不应该 public string Field 是 private string Field 吗?
-
不,
field是私有的,Field是可用于从公共角度访问field的访问器。当然,在示例中它没有多大意义,因为它只是返回field,但您可以在此处添加更多逻辑以增强您在访问Field时收到的输出(例如重新格式化等)
标签: class properties field protection