Почему компилятор выдает warning?
От: Uzzy Россия  
Дата: 14.08.09 09:32
Оценка:
Имеется такой код


   public class A
   {
      
   }

   public class C : A
   {
      public event EventHandler Modified;
   }

   public class F<T> 
      where T : A
   {
      private readonly T owner;

      public F(T owner)
      {
         this.owner = owner;
      }

      public T Owner { get { return owner; } }
   }

   public class G : F<C>
   {
      public G(C owner)
         : base(owner)
      {

         Owner.Modified += (o, e) => A();
      }

      private static void A()
      {
      }
   }

   class Program
   {
      static void Main(string[] args)
      {

         C c = new C();
         G g = new G(c);
      }
   }


Компилятор выдает вот такой вот warning

warning CS0067: The event 'TestConsole.C.Modified' is never used

Re: Почему компилятор выдает warning?
От: _FRED_ Черногория
Дата: 14.08.09 09:43
Оценка: 2 (2) +1
Здравствуйте, Uzzy, Вы писали:

U>Имеется такой код

U>   public class C : A
U>   {
U>      public event EventHandler Modified;
U>   }

U>Компилятор выдает вот такой вот warning

U>warning CS0067: The event 'TestConsole.C.Modified' is never used

U>

Объявлен field-like event. В месте подписки вызываются методы add_Modified и remove_Modified. Само же поле делегата для события нигде не используется (а оно использовалось бы если б в классе C событие где-нибудь возбуждалось бы). Скорее всего это некая эвристика, что "наверняка" (с точки зрения компилятора) такой код програмист написал по ошибке, объявив событие и забыв его отправить.

Почему нет такого же ворнинга если событие не field-like? Видимо, потому что компилятору невозможно определить способ отправки не-field-like события.
Help will always be given at Hogwarts to those who ask for it.
Re: Почему компилятор выдает warning?
От: Ellin Россия www.rsdn.ru
Дата: 14.08.09 09:47
Оценка:
Потому что в приведенном коде оно не пробрасывается. И нет возможности его пробросить, например:

static void Main(string[] args)
        {

            C c = new C();
            G g = new G(c);         
            c.Modified(new object(), new EventArgs());
        }

приводит к ошибке.
В то время, как добавление метода:

 public class C : A
    {
        public event EventHandler Modified;
        public void click()
        {
            Modified(new object(), new EventArgs());
        }
    }
...
...
...
static void Main(string[] args)
        {

            C c = new C();
            c.click();
        }

Исправляет ситуацию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.