现有一个名为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。请问各位如何来解决!!!!!
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。请问各位如何来解决!!!!!
基类的引用可以指到派生类的实例上,但也只能访问派生类中所包含的基类那一部分数据。
你的程序首先违反了上面一条,其次就是你访问了连基类都没有的方法。
你可以用委托的方法。将委托作为 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()中执行,是因为在你的代码中方法与代码要同时执行一次,所以这里我给合并了。你可以根据你的实现情况来调整。
{
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;
}
}