无论如何都要做类似于我所得到的事情。
我想要做的是在特定时间点调用委托列表并跟踪它们,并且为了保持代码清洁,请在某种列表中调用委托。< / p>
public interface IServiceStatusDelegate
{
object DynamicInvoke(object[] args)
}
public class ServiceStatusDelegate
: Delegate, IServiceStatusDelegate
{
}
public class MyServiceStatusCheckedDelegate
: ServiceStatusDelgate
{
}
public class MyServiceStatusChangedDelegate
: ServiceStatusDelgate
{
}
public class MyClass
{
public ServiceStatusDelgate[] listOfDelegatesToInvoke;
public void InvokeRequiredDelegates()
{
foreach(ServiceStatusDelegate delegateToInvoke in this.listOfDelegatesToInvoke)
delegateToInvoke.DynamicInvoke(new object[]{this, DateTime.Now});
}
}
答案 0 :(得分:3)
你不需要需要代表列表......你在c#中创建的任何委托都将是多播的,所以你需要的只是任何委托,并且您可以将它们与+
结合使用。只需调用它,即可达到所有目标。例如:
Action target = null;
...
target += Method1;
...
target += Method2;
...
if(target != null) target(); // calls Method1 and Method2
这个可以(虽然它没有必要站起来)通过event
实现,这将使调用者的约定非常明显。