如何做更新超过3个类
本文关键字:3个类 更新 何做 | 更新日期: 2023-09-27 18:02:07
通常我们更新一些数据从ClassB
到ClassA
(所以超过2类)-通过使用事件或委托。
我需要做的是从ClassC
更新ClassA
(ClassC
通过ClassA
和ClassB
打开)。所以不能直接访问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窗体。下面是一个有两个类的例子:
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上的方法(或将数据传递给它)。
如果不向ClassB
引入代码,这是不可能的,因为根据您的设计,ClassA
和ClassC
的实例之间没有直接通信。由于ClassB
是中介,它必须传递某种机制,使它们能够进行通信。
最简单的解决方案就是通过ClassB
将对相关ClassA
实例的引用传递给ClassC
。如果这对您来说太像是不必要的耦合,那么是的,您应该使用指定要采取的操作的委托(并包含对ClassA
的引用)。
感觉C和B的构造函数都应该接收一个Action委托参数,在这种情况下是一个委托给UpdatingFromClassC()。确切的机制不一定是这样的,但从给出的描述来看,似乎最适合这种情况。