从“A”类调用“Form”类方法,而不添加对“Form”类的引用
本文关键字:Form 添加 引用 类方法 调用 | 更新日期: 2023-09-27 17:55:44
我有两个项目,一个是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...
}
}
您可以通过将
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...
}
}
虽然 David 的回调方法是一个足够的解决方案,但如果您的交互变得更加复杂,我会使用这种方法
在类库中创建界面
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;
}
}