public MemberShipFunDlg(ref StructMemberShipFunc memberShipFun)
        {
            InitializeComponent();            m_dLeftValue = memberShipFun.Min;
            m_dRightValue = memberShipFun.Max;
            m_emFunType = memberShipFun.MSFunction;            memberShipFunRef = memberShipFun;        }以上的代码,代码中我想通过memberShipFunRef = memberShipFun;这句代码实现结构体的引用传递,但后来才知道C#中的结构体是值传递的,现在我想实现的功能是通过改变结构体变量memberShipFunRef,从而改变结构体变量memberShipFun,最终将memberShipFun作为函数的引用参数返回。请问这样的设计是不是有问题?我试过,如果我把结构体都换成类,是可以实现的,但现在关键是我不想用类,只想用结构体,应该怎么做呢》??? 谢谢大家的解答

解决方案 »

  1.   

    可以考虑在这个对话框退出的时候把memberShipFunRef 重新复制给memberShipFun。
      

  2.   

     public MemberShipFunDlg(ref StructMemberShipFunc memberShipFun)
            {
                InitializeComponent();            m_dLeftValue = memberShipFun.Min;
                m_dRightValue = memberShipFun.Max;
                m_emFunType = memberShipFun.MSFunction;            memberShipFunRef = memberShipFun;        }ref StructMemberShipFunc memberShipFun类似于StructMemberShipFunc* memberShipFun;
    memberShipFunRef = memberShipFun;类似于memberShipFunRef = *memberShipFun;
    所以是做不到的
      

  3.   

    MarshaStructToPrt  好象是复制一个到指定的地址... 好象不能实现这个.
      

  4.   

    那我还得把结构体改为类?还是还有其他的方法来实现?StructMemberShipFunc这个结构体目的是想把MemberShipFunDlg这个窗体的一些重要操作信息记录下来,方便下一次打开窗体,利用结构体中保存的信息初始化窗体(恢复上一次窗体的操作)。不知道除了把结构体改为类,还有没有其他的方法。
      

  5.   

    这个我也已经想到过了,但是memberShipFun是函数的参数,而对话框退出的事件中没有办法得到memberShipFun这个参数的
      

  6.   

    StructMemberShipFunc 你要是即想在结构里面改变StructMemberShipFunc 的值又想让它的变化在外面也被看见的话,就要ref(指的是同一个对象),就是说调用和被调用双方都看得见变化。
    要是用OUT 就说明,StructMemberShipFunc 的被调用放才能看得见它的变化要是两个修饰副之一都不用的话,旧说明双方谁也看不见,该对象的变化