从“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...
        }
    }

从“A”类调用“Form”类方法,而不添加对“Form”类的引用

您可以通过将

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;
    }
}