Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Можно-ли объявить событие в интерфейсе  [new]
intrf
Guest
при попытке скомпилировать этот код

public interface MyInterface
{
  delegate void MyEventDelegate();
  event MyEventDelegete MyEvent;
}

компилятор ругается, что нельзя объвлять типы в интерфейсах. Неужели никак нельзя объявить тут событие ?
29 авг 08, 13:28    [6124871]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5116
тут событие объявить можно, делегат нельзя.
public delegate void MyEventDelegate();

        public interface MyInterface
        {
            event MyEventDelegate ev;
        }
29 авг 08, 13:34    [6124916]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Можно-ли объявить событие в интерфейсе  [new]
anc32
Member

Откуда: Кострома
Сообщений: 146
winsky!,

а какой обходной путь?
20 фев 19, 18:55    [21815736]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21057
anc32
а какой обходной путь?
Обходной путь обходного пути, который предложил winsky?
требуется-то что?
20 фев 19, 18:58    [21815740]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5323
anc32
а какой обходной путь?

Никакой.
C# language specification, §13.2 "Interface members"
The members of an interface must be methods, properties, events, or indexers. An interface cannot contain constants, fields, operators, instance constructors, destructors, or types, nor can an interface contain static members of any kind.

А объявление делегата равносильно объявлению вложенного типа:
class Foo
{
  public delegate void Bar(string zot);
}

.class private auto ansi beforefieldinit test2.Foo
  extends [mscorlib]System.Object
{
  .method public hidebysig specialname rtspecialname instance void .ctor () cil managed 
  {
      IL_0000: ldarg.0
      IL_0001: call instance void [mscorlib]System.Object::.ctor()
      IL_0006: nop
      IL_0007: ret
  }

  .class nested public auto ansi sealed Bar extends [mscorlib]System.MulticastDelegate
  {
      .method public hidebysig specialname rtspecialname instance void .ctor (
              object 'object',
              native int 'method'
          ) runtime managed 
      {
      }

      .method public hidebysig newslot virtual instance class [mscorlib]System.IAsyncResult BeginInvoke (
              string zot,
              class [mscorlib]System.AsyncCallback callback,
              object 'object'
          ) runtime managed 
      {
      }

      .method public hidebysig newslot virtual instance void EndInvoke (
              class [mscorlib]System.IAsyncResult result
          ) runtime managed 
      {
      }

      .method public hidebysig newslot virtual instance void Invoke (
              string zot
          ) runtime managed 
      {
      }
  }
}
21 фев 19, 06:17    [21815990]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 73051
Делегат это и есть тип, определяющий сигнатуру метода.
21 фев 19, 21:30    [21816874]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3607
В интерфейсе можно объявлять только методы
Событие по сути есть 2 метода Add и Remove
Как и свойство Set и Get
21 фев 19, 22:44    [21816910]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
fkthat
Member

Откуда:
Сообщений: 1747
Вообще, свой делегат для события определять не надо. Для этого есть стандартный делегат EventHandler.
24 фев 19, 10:08    [21818082]     Ответить | Цитировать Сообщить модератору
 Re: Можно-ли объявить событие в интерфейсе  [new]
hVostt
Member

Откуда:
Сообщений: 16313
anc32
winsky!,

а какой обходной путь?


Какую задачу решаем? Обходной путь для Чего?
24 фев 19, 22:24    [21818362]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить