Подскажите, как можно разрешить следующую ситуацию?
Есть код (С#)
using System;
namespace SampleNamespace
{
/// <summary>
/// Summary description for Sample.
/// </summary>
public class Sample : ISample
{
public Sample()
{
//
// TODO: Add constructor logic here
//
}
public event SampleHandler SampleEvent;
private void SomeSubroutine(int index)
{
System.Delegate[] invklist = SampleEvent.GetInvocationList();
//.....
//.....
}
}
public delegate void SampleHandler(object sender, System.EventArgs e);
public interface ISample
{
event SampleHandler SampleEvent;
}
}
При наследовании интерфейса
ISample классом
Sample событие
SampleEvent имеет тип
SampleHandler, что и надо для последующей обработки.
А вот, то же, но на VB.Net:
Imports System
Namespace SampleNamespace
Public Delegate Sub SampleHandler(ByVal sender As Object, ByVal e As System.EventArgs)
Public Interface ISample
Event SampleEvent As SampleHandler
End Interface
Public Class Sample
Implements ISample
Public Event SampleEvent(ByVal sender As Object, ByVal e As System.EventArgs) Implements ISample.SampleEvent
End Class
End Namespace
Т.е при наследовании интерфейса
ISample классом
Sample IntellySense автоматически создает реализацию события
SampleEvent тип которого уже не делегат
SampleHandler.
Возможно я не так преобразовал код в VB.Net.
Что можно предпринять?
Здравствуйте, <Аноним>, Вы писали:
Строку
Public Event SampleEvent(ByVal sender As Object, ByVal e As System.EventArgs) Implements ISample.SampleEvent
замкнить на
Public Event SampleEvent As SampleHandler Implements ISample.SampleEvent
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, cvetkov, Вы писали:
C>Здравствуйте, <Аноним>, Вы писали:
C>Строку
C>C> Public Event SampleEvent(ByVal sender As Object, ByVal e As System.EventArgs) Implements ISample.SampleEvent
C>
C>замкнить на
C>C> Public Event SampleEvent As SampleHandler Implements ISample.SampleEvent
C>
После замены
IntellySense не ругается, но
все равно не дает сделать следующее:
dim invklist as System.Delegate() = SampleEvent.GetInvocationList
Пишет,что
SampleEvent — это событие и поэтому не может быть вызвано напрямую. Используйте
RaiseEvent.
Что в данном случае я делаю не так?
Заранее благодарю.
Здравствуйте, dmibr, Вы писали:
D>После замены IntellySense не ругается, но все равно не дает сделать следующее:
D>D>dim invklist as System.Delegate() = SampleEvent.GetInvocationList
D>
D>Пишет,что SampleEvent — это событие и поэтому не может быть вызвано напрямую. Используйте RaiseEvent.
D>Что в данном случае я делаю не так?
есть подозрение что бейсик этого не умеет.
а что нужно сделать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, cvetkov, Вы писали:
C>Здравствуйте, dmibr, Вы писали:
D>>После замены IntellySense не ругается, но все равно не дает сделать следующее:
D>>D>>dim invklist as System.Delegate() = SampleEvent.GetInvocationList
D>>
D>>Пишет,что SampleEvent — это событие и поэтому не может быть вызвано напрямую. Используйте RaiseEvent.
D>>Что в данном случае я делаю не так?
C>есть подозрение что бейсик этого не умеет.
C>а что нужно сделать?
Дык, хочется получить список вызовов текущего делегата c последующей обработкой его в цикле.
Здравствуйте, dmibr, Вы писали:
C>>есть подозрение что бейсик этого не умеет.
C>>а что нужно сделать?
D>Дык, хочется получить список вызовов текущего делегата c последующей обработкой его в цикле.
а зачем?
боюсь что придеться создавать custom event
private ev_list as ArrayList()
Public Custom Event SampleEvent As SampleHandler
AddHandler(ByVal value As SampleHandler)
ev_list.Add(value)
End AddHandler
RemoveHandler(ByVal value As SampleHandler)
ev_list.Remove(value)
End RemoveHandler
RaiseEvent()
foreach 'бла бла бла. не помню точный синтаксис
End RaiseEvent
End Event
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>