如何在C#中使用界面

时间:2012-08-21 10:09:11

标签: c# interface decoupling

使用C#.NET 4.0,Visual Studio 2010。

目前我正在研究类的解耦和使用接口。 我已经从另一篇文章中实现了一个解决方案来测试我是否可以使它工作但不幸的是我从来没有使用过接口。

所以这里是我所拥有的基础知识:

Form1中:

partial class Form1 : InterfacePareto
{
    public string myTest
        {
            get { return herpTxt.Text; }
            set { herpTxt.Text = value; }
        }  
} 

接口:

interface InterfacePareto
{
    string myTest { get; set; }
}

MyWorkingOutClass:

Class MyWorkingOutClass
{
    private readonly InterfacePareto pare;

    public MyWorkingOutClass(InterfacePareto pare)
    {
        this.pare = pare;
    }

    private void Testtime()
    {
        string firstName = pare.myTest;
        pare.myTest = firstName + " extra";
    }
}

目的:

目前的计划是从表单文本框中获取文本。然后将其传递给工人阶级。然后工人类进行所需的任何计算,然后将结果传递回表格文本框。

我的问题是,我的代码是否正确。如果是,那么我错过了什么/做错了什么?或者,如果有人认为这不是实现我需要的正确方法,他们是否有任何建议?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我刚刚测试过代码,这对我来说很好用:

public partial class MainForm :Form, InterfacePareto //My main form inheriting Form class and interface
{
    public MainForm()
    {
        InitializeComponent();
    }

    public string myTest
    {
        get { return herpTxt.Text; }
        set { herpTxt.Text = value; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //On button click create MyWorkingOutClass instance and pass MainForms instance
        MyWorkingOutClass mc = new MyWorkingOutClass(this); 
        //After this line text box content will change
        mc.Testtime();
    }
}

//Changed modifier to public
public interface InterfacePareto
{
    string myTest { get; set; }
}

//Changed modifier to public
public class MyWorkingOutClass
{
    private readonly InterfacePareto pare;

    public MyWorkingOutClass(InterfacePareto pare)
    {
        this.pare = pare;
    }

    //Changed modifier to public
    public void Testtime()
    {
        string firstName = pare.myTest;
        pare.myTest = firstName + " extra";
    }
}

答案 1 :(得分:1)

这应该可以正常工作。

当MyWorkingOutClass在与UI线程不同的线程上工作时,您将遇到一个问题。

要解决此问题,您可能需要更改表单上的实现以切换到UI线程。