Наследование интерфейса в VB.Net и С#
От: Аноним  
Дата: 12.09.06 15:21
Оценка:
Подскажите, как можно разрешить следующую ситуацию?

Есть код (С#)


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.
Что можно предпринять?
Re: Наследование интерфейса в VB.Net и С#
От: cvetkov  
Дата: 13.09.06 13:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

Строку
    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>>
Re[2]: Наследование интерфейса в VB.Net и С#
От: dmibr  
Дата: 14.09.06 04:33
Оценка:
Здравствуйте, 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.

Что в данном случае я делаю не так?
Заранее благодарю.
Re[3]: Наследование интерфейса в VB.Net и С#
От: cvetkov  
Дата: 14.09.06 07:52
Оценка:
Здравствуйте, 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>>
Re[4]: Наследование интерфейса в VB.Net и С#
От: dmibr  
Дата: 14.09.06 08:45
Оценка:
Здравствуйте, cvetkov, Вы писали:

C>Здравствуйте, dmibr, Вы писали:


D>>После замены IntellySense не ругается, но все равно не дает сделать следующее:



D>>
D>>dim invklist  as System.Delegate() = SampleEvent.GetInvocationList
D>>


D>>Пишет,что SampleEvent — это событие и поэтому не может быть вызвано напрямую. Используйте RaiseEvent.


D>>Что в данном случае я делаю не так?


C>есть подозрение что бейсик этого не умеет.

C>а что нужно сделать?

Дык, хочется получить список вызовов текущего делегата c последующей обработкой его в цикле.
Re[5]: Наследование интерфейса в VB.Net и С#
От: cvetkov  
Дата: 14.09.06 09:08
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.