如何做更新超过3个类

本文关键字:3个类 更新 何做 | 更新日期: 2023-09-27 18:02:07

通常我们更新一些数据从ClassBClassA(所以超过2类)-通过使用事件或委托。

我需要做的是从ClassC更新ClassA (ClassC通过ClassAClassB打开)。所以不能直接访问ClassCClassA

这怎么可能,这样我就不需要在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窗体。下面是一个有两个类的例子:

 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();
        }
    }
}

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

如何做更新超过3个类

如果不向ClassB引入代码,这是不可能的,因为根据您的设计,ClassAClassC的实例之间没有直接通信。由于ClassB是中介,它必须传递某种机制,使它们能够进行通信。

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

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