Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > описание события в абстрактном классе


Автор: RastaDja 4.7.2011, 15:20
   Доброго времени суток!
   Есть проект, в котором несколько классов унаследовано от абстрактного класса. Классы, которые унаследованы от абстрактного класса - должны генерить сообщение об завершении текущего измерения.
   Сейчас всё это выглядит так
Код

public class ComleatedEventArgs : EventArgs
{
   private Double res;
   public ComleatedEventArgs(Double resours)
   {
      this.res = resours;
   }
   public Double Resours
   {
      get
      {
         return res;
      }
   }
}

public delegate void ComleatedEventHandler(object sender, ComleatedEventArgs e);

public class MyClass : AbstractClass
{
   public event ComleatedEventHandler ReadCompleated;
   //...
    
   private void OnTimedEvent(object source, ElapsedEventArgs e){
      //...
      ComleatedEventArgs ee = new ComleatedEventArgs(0.19);
      OnComleat(ee);
   }
        
   protected virtual void OnComleat(ComleatedEventArgs e)
   {
      if (ReadCompleated != null)
      {
         ReadCompleated(this, e);    //  посылаем сообщение
      }
   }
}

а вот абстрактный класс
Код

public abstract class AbstractClass
{
   public abstract String Name { get; set; }
   //...
}


подскажите как в абстрактном классе описать событие? Это нужно, чтоб все унаследованные классы генерили такое сообщение.

Автор: Rohoss 4.7.2011, 15:41
Цитата(RastaDja @  4.7.2011,  15:20 Найти цитируемый пост)
подскажите как в абстрактном классе описать событие? Это нужно, чтоб все унаследованные классы генерили такое сообщение. 

да так как и в обычном. в чём проблема то?

Автор: RastaDja 4.7.2011, 15:45
Цитата(Rohoss @  4.7.2011,  16:41 Найти цитируемый пост)
да так как и в обычном. в чём проблема то? 

проблема в том, что я не понимаю как это сделать - в абстрактном классе нельзя ведь делать реализацию.
Rohoss, подскажите как это сделать, напишите пожалуйста пример.

Автор: Rohoss 4.7.2011, 16:00
Цитата(RastaDja @  4.7.2011,  15:45 Найти цитируемый пост)
проблема в том, что я не понимаю как это сделать - в абстрактном классе нельзя ведь делать реализацию.

Это ещё почему?

Так чтоли?
Код

public class ComleatedEventArgs : EventArgs
    {
        private Double res;
        public ComleatedEventArgs(Double resours)
        {
            this.res = resours;
        }
        public Double Resours
        {
            get
            {
                return res;
            }
        }
    }
    public delegate void ComleatedEventHandler(object sender, ComleatedEventArgs e);

    public class MyClass : AbstractClass
    {

        public override String Name { get; set; }
    }

    public abstract class AbstractClass
    {
        public abstract String Name { get; set; }
        
        public event ComleatedEventHandler ReadCompleated;

        private void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            ComleatedEventArgs ee = new ComleatedEventArgs(0.19);
            OnComleat(ee);
        }

        protected virtual void OnComleat(ComleatedEventArgs e)
        {
            if (ReadCompleated != null)
            {
                ReadCompleated(this, e);    //  посылаем сообщение
            }
        }

    }

Автор: RastaDja 4.7.2011, 16:30
Rohoss, вот так кажись работает
Код

public abstract class AbstractClass
    {
        public abstract String Name { get; set; }
        public event ComleatedEventHandler ReadCompleated;
        protected virtual void OnComleat(ComleatedEventArgs e)
        {
            if (ReadCompleated != null)
            {
                ReadCompleated(this, e);    //  посылаем сообщение
            }
        }
    }

Спасибо, Вам +  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)