情形如下class A
{
    private int na;
    void fooa()
    {
      B b = new B(na);
    }
    void fooa1()
    {
    想调用nb,咋办;
    }
}class B
{
    private int nb;    B(A a)
    {
     init();
    }
} 具体是这样的
formA中有个控件Ca能过构造函数我传到formB中了
但是formB中的有些变量要在formA中的Ca的事件来执行
不知道怎么办了
请大家帮助.
谢谢

解决方案 »

  1.   

    给变量nb添加set()和get()访问器的属性
    public int Nb
    {
        set
        {
            nb=value;
        }
        get
        {  
            return nb;
        }
    }然后在class A中调用
    B b = new B(na);
    b.Nb;//调用class A中的变量nb
      

  2.   

    互相调不容易么,只要你提供public访问方法或者属性
      

  3.   

    啥无限递归啊,都是些引用而已,用个字段存起来不就行么.
    class A
    {
        private int na;
        private B b;
        void fooa()
        {
           b = new B(na);
        }
        void fooa1()
        {
           b.Nb
        }
    }class B
    {   private A a;
        private int nb;
        Public int Nb
        {
        get {return nb;}
        }    B(A a)
        {
          this.a=a;
         init();
        }
      

  4.   

    相互引用的例子在.net framework中是很常见的。
    这和现实中你和你朋友相互认识一样的道理,你们
    两之间的沟通还需要通过第三方的接口来约束其实没有必要的。当然如果这种依赖关系至关重要时,约定接口以保证在对方被修
    改时相互关系不会被修改而破坏是有好处的。楼上的方法是可行的,但代码不够好看,且需要在A中定义一个新的NB对象,这是不太合理的;微软的.net在做MDIParent时,父窗口向子窗口注册时,事实上也同时完成了子窗口向父窗口MDIChildren中的注册。
    form.MdiParent = mainForm;根据楼上的想法,将你的示例改成(说实话,用A、B表示类名,我想吐):
       internal class A
        {
            private int na;
            private void fooa()
            {
            }        private void fooa1()
            {
                // 想调用nb,咋办;
                int getb = b.Nb;
                //上面就是正确的调用
            }        /// <summary>
            /// 增加的代码
            /// </summary>
            private B b;
            public B B
            {
                get { return b; }
                set { b = value; }
            }
        }    internal class B
        {
            private int nb;        private B(A a)
            {
                Init();            //这里是关键
                a.B = this;
            }        /// <summary>
            /// 这里是需要暴露的属性
            /// </summary>
            public int Nb
            {
                get { return nb; }
                set { nb = value; }
            }        private void Init()
            {
            }
        }