lz似乎还没有看明白public class M
    {
        private int count = 1;        public int Count
        {
            get { return count; }
            set { count = value; }
        }       
    }
…………    M MM = new M();    MM.Count = 10;//ok 
    MM.count // count 是M的私有成员 所以在这里根本就不可见

解决方案 »

  1.   

    jiatong1981 你好像也没看明白啊MM是在M中被创建的
    MM.count  对於M是可见的
      

  2.   

    真的可以用吗?
    在2003下是这样的
    M objM=new M();
    objM.Test();未处理的“System.StackOverflowException”类型的异常出现在 
    按我的理解,实例化objM的时候,它需要在内部实例化一个M类型的私有变量MM,而实例化MM的时候,又需要在MM的内部实例化一个M类型的私有变量MM,…………
    就这样“从前有座山,山上有座庙……”
    没有头了…………
      

  3.   

    楼上正确 
    不过以下这段代码已经VS2005 运行通过public class Class1
        {
            
            int count = 1;
            public Class1(int count)
            {
                this.count = count;
            }
            public Class1(Class1 c1)
            {
                this.c1 = c1;
            }
            private Class1 c1;        public int Test()
            {
                if (c1 != null)
                    return c1.count;
                else
                    return count;
            }
            
        }
     private void Form2_Load(object sender, EventArgs e)
            {
                MyTest.Class1 c1 = new Class1(12);
                MyTest.Class1 c2 = new Class1(c1);
                this.Text = c2.Test().ToString();
            }
      

  4.   

     public class M
        {
            private M MM ;
            private int count = 1;        public int Count
            {
                get { return count; }
                set { count = value; }
            }        public int Test()
            {
                MM = new M();
                return MM.count;
            }    }
    ………………这样是可以的 但是我没有研究过 不知道这样做有何好处 貌似叫做类的对象复用??但是 在类内部代码中MM肯定可以访问到count的
      

  5.   

    private M MM ;private M MM =new M();差别就在于这里,后者是一个没有退出的递归
    而前者只是定义了一个变量,并没有初始化他,也就不会循环递归了
    MM中访问到count的问题是肯定的,因为MM是类M的成员,Test方法也是,类中的成员自然不论何时都可以互相访问的,写过一个类似队列的例子,其中节点的定义大概也是如此吧
    public class Node
    {
    private Node preNode;
    private Node nextNode;
    public Node PreNode
    {
    get
    {
    if (preNode!=null)
    return preNode;
    else
    throw new NullReferenceException("没有Previous节点");
    }
    }
    public Node NextNode
    {
    get
    {
    if (nextNode!=null)
    return nextNode;
    else
    throw new NullReferenceException("没有Next节点");
    }
    }
    }如果要添加一个前置节点的前置节点这个属性,就可以用return preNode.preNode了,还有什么好处我就不太了解了,等待楼下高手解释。
      

  6.   

    虽然我个人不欣赏这种用法,但是这个访问的确是允许的,二楼三楼解释正确的。
    private M MM = new M();是会产生从前有座山的问题,但是搞成
    private static M MM = new M();就不会了。
      

  7.   

    amwanfwbx 说的有道理 我来解释一下
    Test 本身就属于class M 所以它要访问M的私有成员是合法的,这个你可以重温一下private public...的定义描述
    另外一个是LZ代码的小问题,与LZ的问题倒没有什么关系
     private M MM = new M();
    MM在构造的时候会被调用,而产生的操作是创建一个新的M对象
    这样构造函数就产生了一个没有退出条件的无限递归调用。