到今天才知道类的方法中可以直接访问实例的私有成员
或许标题表达的不够准确吧,来看一下代码吧
public class MyClass
{
private int _number;
public int Number
{
get { return _number; }
}
public void SetNumberOfAnotherObject(MyClass obj, int number)
{
obj._number = number; // 可以直接访问实例的私有成员
}
public MyClass(int number)
{
_number = number;
}
}
[Test]
public void TestMyClass()
{
MyClass c1 = new MyClass(1);
MyClass c2 = new MyClass(2);
Assert.AreEqual(2, c2.Number);// it's ok
c1.SetNumberOfAnotherObject(c2, 3);
Assert.AreEqual(3, c2.Number);// it's ok
}
以前从来都是认为一个对象的私有成员,除非通过对象的公开方法,是不能被另一个对象所访问的。偶尔写了一段代码(有递归)让我发现了上述问题,经过测试的确是可行的。想了想这么处理在有时候会很方便,比如我在递归调用对象的方法f1时,只是希望在对象内部调用,原来我以为对象A只能访问对象B的公共方法,所以只能把f1声明为public,这样f1就达不到封闭的效果了。现在就没问题了,我可以把f1声明为private了,在对象A的f1中可以调用对象B的f1,这没有丝毫问题。
以上是我学习中的一点经验,与大家分享。