【发布时间】:2020-04-24 18:00:34
【问题描述】:
我在这里进行了一些搜索,但无法明确回答我的问题。 我有几个子类都有 1 个接口。我有一个包含变量的父类,该变量是根据外部参数创建为这些子类之一的新实例。这是一些代码:
public interface I
{
public delegate void ExecutionCompletedHandler(bool status);
public event ExecutionCompletedHandler executionCompleted;
public void Execute();
}
public class C1 : I
{
public void Execute()
{
// Create background worker and execute DoStuff
}
public void BackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
bool status = (bool)e.Result;
this.executionCompleted(true);
}
}
public class C2 : I
{
// Same setup as C1
}
public class C3 : I
{
// Same setup as C1
}
public class MyManager
{
public void doStuff(int val)
{
var compObj = null;
// compObj is now instantiated as new instance of C1, C2 or C3 depending on val
// ex: compObj = new C1();
compObj.executionCompleted += new I.ExecutionCompletedHandler(executionCompletedHandler);
compObj.Execute();
}
private void executionCompletedHandler(bool status)
{
// Do stuff with status and exit gracefully
}
}
这是我想做的,但我知道这是不对的。我觉得好像我已经完成了 90% 的路。就是说C1类中的executionCompleted变量隐藏了接口的变量。我尝试遵循各种指南和示例,但无法弄清楚这一点。谢谢!
编辑:我在 Visual Studio 2010 中使用 .NET 4.0。
编辑 2:
在@NikProtsman 的帮助下,我能够弄清楚...我将接口转换为抽象类,并在该抽象类中实现了CompleteExecution 函数。在这个函数中,我会调用事件处理程序。在 C1/C2/C3 类中,当后台工作人员执行完毕后,我会调用此方法。完美运行。我们正在升级到 VS 2019 的过程中,在此之后,我将推动它更快地实现!谢谢!
【问题讨论】:
-
I接口未在任何地方实现 -
@PavelAnikhouski 示例已更新。我忘了把它们放进去。就像在我的实际代码中一样。
标签: c# interface eventhandler