到今天才知道类的方法中可以直接访问实例的私有成员

或许标题表达的不够准确吧,来看一下代码吧
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,这没有丝毫问题。

以上是我学习中的一点经验,与大家分享。

posted @ 2006-07-17 08:47  andy.wu  阅读(1720)  评论(13编辑  收藏  举报