我有两个项目,一个是 Winform 应用程序,另一个是类库。我在Winform中添加了对类库的引用,并调用了类库的方法。现在我想在类库中调用winform应用程序中的不同方法,但我不能将winform的引用添加到类库中。
代码: -
public partial class Form1 : Form
{
private void btn_Click(object sender, EventArgs e)
{
A obj = new A();
obj.foo();
}
public string Test(par)
{
//to_stuff
}
}
并在类库中
class A
{
public void foo()
{
//Do_stuff
//...
Test(Par);
//Do...
}
}
答案 0 :(得分:4)
您可以通过将Test
注入class A
来实现此目的。
例如:
public partial class Form1 : Form
{
private void btn_Click(object sender, EventArgs e)
{
A obj = new A();
obj.foo(Test);
}
public string Test(string par)
{
//to_stuff
}
}
class A
{
public void foo(Func<string, string> callback)
//Do_stuff
//...
if (callback != null)
{
callback(Par);
}
//Do...
}
}
答案 1 :(得分:3)
虽然David的回调方法是一个充分的解决方案,但如果您的交互变得更复杂,我会使用这种方法
在类libary中创建一个inteface
public interface ITester
{
string Test(string value);
}
重写您的代码,以便A类需要ITester接口
public class A
{
public A(ITester tester)
{
this.tester = tester;
}
public string foo(string value)
{
return this.tester.Test(value);
}
}
在Form1中实现您的界面
public partial class Form1 : Form, ITester
{
private void btn_Click(object sender, EventArgs e)
{
A obj = new A(this);
obj.foo("test");
}
public string Test(string value)
{
//to_stuff
return value;
}
}