呼叫"表格"来自" A"的类方法没有添加对" Form"的引用的类类

时间:2015-06-11 12:58:15

标签: c# winforms methods class-library

我有两个项目,一个是 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...

        }
    }

2 个答案:

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