如何更新3个班级

时间:2013-03-02 18:36:30

标签: c# events delegates

通常我们会将一些数据从ClassB更新为ClassA(因此超过2个类别) - 通过使用事件或代理。

我需要做的是从ClassA更新ClassCClassC通过ClassAClassB打开。因此,无法从ClassC直接访问ClassA

这怎么可能,以便我不需要在ClassB中执行任何其他代码?

示例:

class ClassA
{
    private void OpenClassB() 
    {
        ClassB b = new ClassB();
        b.WorkOnB();
    }

    public void UpdatingFromClassC()
    {
        // I have to call this method from ClassC (from method WorkOnC)
    }
}

class ClassB
{
    public void WorkOnB()
    {
        //...
        //and:
        OpenClassC();
    }

    private void OpenClassC()
    {
        ClassC c  = new ClassC();
        c.WorkOnC();
    }
}

class ClassC
{
    public void WorkOnC()
    {
        //call UpdatingFromClassC() method on form1 from here!
    }
}

我不喜欢的是传递Form1的参考。我必须使用活动或代表 - 最好的选择。

---

让我更清楚一点。我做windows窗体。以下是2个类的示例:

 public partial class Form1 : Form
 {
    Class1 c1;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (c1 == null)
        {
            c1 = new Class1();
            c1.OnDoWork += new Action(From_Class1_OnDoWork);
            c1.DoSomeWork();
        }
    }

    private void From_Class1_OnDoWork()
    {
        //put your code into here for refreshing
        MessageBox.Show("Form1 is being refreshed!");
    }
}

class Class1
{
    public event Action OnDoWork;
    public Class1()
    {
        //constructor 
    }

    public void DoSomeWork()
    {
        System.Windows.Forms.MessageBox.Show("Do some work in Class 1");
        if (OnDoWork != null)
        {
            OnDoWork();
        }
    }
}

现在我想创建一个从Class1打开的nother Form(Form2)。我必须从Form2唤醒Form1上的方法(或将数据传递给它)。

我希望你明白这一点。

2 个答案:

答案 0 :(得分:0)

如果不向ClassB引入代码,则无法做到这一点,因为根据您的设计,ClassAClassC的实例之间没有直接的通信。由于ClassB是中介,它必须传达一些可以与之沟通的机制。

最简单的解决方案就是通过ClassA将相关ClassC实例的引用传递给ClassB。如果你觉得这太像是不必要的耦合,那么是的,你应该使用一个指定要采取的动作的委托(并包含对ClassA的引用)。

答案 1 :(得分:0)

感觉谎言C和B的构造函数应该接收 Action 委托参数,在这种情况下是 UpdatingFromClassC()的委托。确切的机制不一定是这个,但根据给出的描述似乎最适合这种情况。

相关问题