最有效的方法来解决这个循环引用?

时间:2017-09-09 12:52:11

标签: c# oop visual-studio-2013 circular-dependency

这里是C#的新手。所以我在不同的项目中得到了我的第一堂课(Form1)和第二堂课(Class1)。我将Form1添加到Class1的引用中,因为Form1从其GUI中获得了Class1需要从其方法进行计算的数据。问题是,我无法从Class1到Form1的方法得到结果,因为我无法通过循环引用来引用它。

public partial class Form1 : Form 
{

    public Form1()
    {
        InitializeComponent();

    }

    private void label3_Click(object sender, EventArgs e)
    {

    }

    public void button1_Click(object sender, EventArgs e)
    {
       // for getting data from Class1
       // ClassLibrary1.Class1 c = new ClassLibrary1.Class1();
       // label7.Text = c.GetDate();        }

    private void button2_Click(object sender, EventArgs e)
    {

    }
}



 public class Class1
 {

    private int daysz;

    private int GetDate()
    {
        Activity3_Espiritu.Form1 f = new Activity3_Espiritu.Form1();
        daysz = (f.lastDay - f.firstDay).Days;
        return daysz;
    }

}

有什么方法可以解决这个问题?我已尝试过界面,但即使在网上寻找解决方案后,我也完全不知道如何使用它。

2 个答案:

答案 0 :(得分:3)

Class1永远不需要对Form1的引用,而Form1中的代码应调用Class1中的GetDate()方法,并传入适当的GetDate()参数进行评估。当GetDate()返回结果时,您只需将其分配给变量或返回到需要显示它的用户控件(将是Label7?)。

public void button1_Click(object sender, EventArgs e)
{
    var c = new Class1();
    var yourResult = c.GetDate(lastDay, firstDay);
    label7.Text = yourResult;
}

public int GetDate(DateTime lastDate, DateTime firstDate)
{
    return (lastDate - firstDate).Days;
}

答案 1 :(得分:1)

如果您可以更改GetDate方法的签名,可以尝试以下代码:

public class Class1
{
  private int daysz;

  private int GetDate(__yourDatType__ lastDay, __yourDatType__ firstDay)
  {
    daysz = (lastDay - firstDay).Days;
    return daysz;
  }
}

现在,在button1_Click写下这个:

ClassLibrary1.Class1 c = new ClassLibrary1.Class1();
label7.Text = c.GetDate(this.lastDay, this.firstDay);