从 "A" class 调用 "Form" class 方法而不添加对 "Form" class 的引用
Calling "Form" class method from "A" class without adding a reference to the "Form" class
我有两个项目,一个是 Winform 应用程序,另一个是 Class 库 。我在Winform中添加了对class库的引用,并调用了class库的一个方法。现在我想在 winform 应用程序中从 class 库调用不同的方法,但我无法将对 winform 的引用添加到 class 库。
代码中:-
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 图书馆
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 的回调方法是一个足够的解决方案,但如果您的交互变得更加复杂,我会使用这种方法
在您的 class 库中创建一个界面
public interface ITester
{
string Test(string value);
}
重写你的代码 class 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;
}
}
我有两个项目,一个是 Winform 应用程序,另一个是 Class 库 。我在Winform中添加了对class库的引用,并调用了class库的一个方法。现在我想在 winform 应用程序中从 class 库调用不同的方法,但我无法将对 winform 的引用添加到 class 库。
代码中:-
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 图书馆
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 的回调方法是一个足够的解决方案,但如果您的交互变得更加复杂,我会使用这种方法
在您的 class 库中创建一个界面
public interface ITester
{
string Test(string value);
}
重写你的代码 class 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;
}
}