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