C# 如何在C中使用接口#

C# 如何在C中使用接口#,c#,interface,decoupling,C#,Interface,Decoupling,使用C#.NET 4.0,Visual Studio 2010 目前我正在研究类的去耦合和使用接口。 我已经从另一篇文章中实现了一个解决方案,以测试它是否能够正常工作,但不幸的是,我从未使用过接口 以下是我的基本知识: 表格1: partial class Form1 : InterfacePareto { public string myTest { get { return herpTxt.Text; } set { h

使用C#.NET 4.0,Visual Studio 2010

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

以下是我的基本知识:

表格1:

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";
    }
}
目的:

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

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

非常感谢

这应该可以

当MyWorkingOutClass在不同于UI线程的线程上执行其工作时,您会遇到一个问题


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

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

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

看起来不错。在这种情况下,你还有其他问题吗?我要做的就是处理一个按钮事件来启动代码,但是我如何将结果传递回文本框呢?听起来很傻,但我的理解是,除了显示的原始文本之外,不会发生任何事情。设置了myTest属性后,您的文本框应该会更改:)您还没有测试过这个吗?是的,对不起,没有更改,原因是它似乎没有使用接口或工作类。一切对我来说都很好。我将发布代码,代码中只有很少的更改。我要做的就是启动一个按钮事件来启动代码,但是如何将结果传递回文本框?听起来真的很傻,但我的理解是,除了显示原始文本之外,不会发生任何事情@你的答案-在这种情况下,使用任务会比使用新线程更好吗?或者说,线程和任务之间没有什么区别。在C#5中,使用async和await将使编写代码更为简洁。annnnd这就是为什么我没有得到任何结果。。。。。。。我试图调用该方法,但它不存在,我搔搔头,认为有一些神奇的事情发生了,我不明白,所以决定直接从表单调用,ofc这也不起作用,但没有错误。猜猜是什么?一个在测试时间里的私人而不是公共……有时我需要一记耳光。非常感谢您的帮助并向您验证我的代码+1,先生。您刚刚得到一个教训-如果您看不到方法,您要做的第一件事就是检查修饰符。我学会了:)是的,而不是像瓦利一样惊慌失措!非常感谢,我将使用它来运行查询并返回数据集。快速提问,以此为基础,它应该工作?或者在使用数据集时是否有一些小的添加?我的意思是将文本传递给工人阶级,将它们用作sql查询中的参数,进行计算并将日期集返回到我的表单上的datgridview是的,这应该有效。:)只需将数据集合传递给您的工作类,创建参数,执行查询,获取数据并将其设置为接口属性,接口属性将设置为适当的数据网格。