Как определить новый класс, который наследуется от Delegate - PullRequest
1 голос
/ 09 марта 2012

в любом случае можно сделать что-то похожее на то, что я получил ниже.

Что я пытаюсь сделать, это вызвать список делегатов в определенный момент времени и отслеживать их, и радидля поддержания чистоты кода сохраняйте вызываемые делегаты в каком-либо списке.

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

1 Ответ

3 голосов
/ 09 марта 2012

Вам не нужно нужен список делегатов ... любой созданный вами в c # делегат будет многоадресным, поэтому все, что вам нужно, это любой делегат, и вы можетеобъедините их с +.Просто вызовите его, и все цели будут достигнуты.Например:

Action target = null;
...
target += Method1;
...
target += Method2;
...
if(target != null) target(); // calls Method1 and Method2

Этот может (хотя он не обязательно должен стоять) быть реализован через event, что сделает соглашение очень очевидным для вызывающей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...