【问题标题】:how to use interface in C#如何在 C# 中使用接口
【发布时间】:2012-08-21 10:09:11
【问题描述】:

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

目的:

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

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

非常感谢!

【问题讨论】:

  • 看起来不错。在这种情况下您还有其他问题吗?
  • 好吧,我要做的就是触发一个按钮事件来启动此代码,但是如何将结果传递回文本框?听起来很傻,但我的理解是除了显示的原始文本之外什么都不会发生。
  • 在设置pare.myTest 属性之后,你的文本框应该会改变:) 你还没有测试过吗?
  • 是的,对不起,没有变化,原因是它似乎没有使用接口或工作类。
  • 对我来说一切正常。我将发布我的代码,只需对代码进行一些更改

标签: c# interface decoupling


【解决方案1】:

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

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

【讨论】:

  • annnnd 这就是为什么我没有得到任何结果....... '不明白所以决定从表格直接调用,ofc这也不起作用但没有错误。猜猜它是什么?在测试时间而不是公开的时候是一个肮脏的私人............有时我需要一记耳光。非常感谢您的帮助和验证我的代码 +1 先生
  • 你刚刚上了一课——如果你看不到方法,你要做的第一件事就是检查修饰符。我学会了:)
  • 是的,而不是像沃利一样惊慌失措!非常感谢,我将使用它来运行查询并返回数据集。快速提问,以此为基础,它应该可以工作吗?还是在使用数据集时有什么小补充?
  • 我的意思是将文本传递给工人阶级,将它们用作 sql 查询中的参数,进行计算并将日期集返回到我表单上的 datgridview
  • 是的,这应该可以。 :) 只需将数据集合传递给您的工作类,创建参数,执行查询,获取数据并将其设置为接口属性,该属性将设置为适当的数据网格。
【解决方案2】:

这应该可以正常工作。

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

为了解决您可能希望更改表单上的实现以切换到 UI 线程的问题。

【讨论】:

  • 好吧,我要做的就是触发一个按钮事件来启动此代码,但是如何将结果传递回文本框?听起来很傻,但我的理解是除了显示的原始文本之外什么都不会发生。 @youranswer - 在这种情况下,使用任务会比使用新线程更好吗?还是几乎没有区别?
  • 为此,线程和任务之间没有区别。在 C# 5 中使用 async 和 await 会使代码更简洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多