现有一个名为MyDll的Dll类库,如下:
Class MyDll
{
   private Form sf;
   public MyDll(Form f,string str)
   {
       sf = f;
       sf.MyMethods();
       sf.MyNum += 12;
   }
}有一个EXE中部分代码如下:
Class MyForms : System.Windows.Form
{
   public void MyMethods()
   {
      .....
   }
   public int MyNum;
   
   public void My()
   {
      MyDll mydll = new MyDll(this ,"str");
   }
}在MyDll中是无法访问到MyMethods中的方法或成员的,提示:Form中并不包含MyMethods方法!!
在MyDll中也是无法引用MyForms的,因为MyForms是一个EXE。请问各位如何来解决!!!!!

解决方案 »

  1.   

    首先你的方法在逻辑上就有问题,不符合类的继承要求。
    基类的引用可以指到派生类的实例上,但也只能访问派生类中所包含的基类那一部分数据。
    你的程序首先违反了上面一条,其次就是你访问了连基类都没有的方法。
    你可以用委托的方法。将委托作为 public MyDll(Form f,string str)的第一个参数。
    单就你给出的代码,你可以大致修改成如下的形式来满足你的要求:
    public delegate void MyDelegate();Class MyDll
    {
       public MyDll(MyDelegate f,string str)
       {
       if(f != null)
       {
           f();
       }
       }
    }有一个EXE中部分代码如下:
    Class MyForms : System.Windows.Form
    {
       public void MyMethods()
       {
          .....
          MyNum += 12;
       }
       private int MyNum;
       
       public void My()
       {
          MyDll mydll = new MyDll(this.MyMethods ,"str");
       }
    }
    MyNum += 12;放在MyMethods()中执行,是因为在你的代码中方法与代码要同时执行一次,所以这里我给合并了。你可以根据你的实现情况来调整。
      

  2.   

    ThreadSharp(ThreadSharp V2006) 教训得是呀,这个类是不符合类的继承要求,我开始也没有什么方法,现看了你的贴子之后终于明白了。不胜感谢!!
      

  3.   

    使用接口。interface IForm
    {
    public virtual void MyMethods();public int MyNum;
    }
    Class MyDll
    {
       private IForm sf;
       public MyDll(IForm f,string str)
       {
           sf = f;
           sf.MyMethods();
           sf.MyNum += 12;
       }
    }