Изменение поведения установщика свойств из базового класса - PullRequest
1 голос
/ 03 ноября 2011

Я работаю с Telerik RadScheduleView и внедрил класс IAppointment в дочерний класс 'Job', который я определил.Свойства 'Start' и 'End' (DateTimes) находятся в классе IAppointment (от которого я наследую).Переход к методу Public Virtual (в классе IAppointment) показывает мне {get;задавать;} но я не могу изменить его, например, для отображения MessageBox при установке нового значения в Start или End.На вкладке написано «Метаданные», это не то, что я не могу редактировать?Есть ли способ, как я могу переопределить этот метод доступа как-то ??

Ответы [ 4 ]

5 голосов
/ 03 ноября 2011

Имя IAppointment будет указывать мне, что это не класс, который вы наследуете, а интерфейс, который вы реализуете - однако я не знаком с продуктами Telerik, и их соглашения об именах могут быть просто странными, поэтомупринимая то, что вы говорите по номиналу, да, вы должны иметь возможность переопределить свойство, определенное как виртуальное.

Если, например, у нас есть следующий класс, определенный где-то, но доступный, чтобы мы могли наследоватьи который предоставляет член virtual:

public class A
{
    public virtual int J { get; set; }
}

Тогда мы можем наследовать и override - мы все равно можем получить доступ к базовой реализации, но при необходимости «внедрить» нашу собственную:

public class B : A
{
    public override int J
    {
        get
        {
            return base.J;
        }
        set
        {
            base.J = value;
        }
    }
}

Но я не могу себе представить, почему вы хотите показать окно сообщения из логики доступа к свойствам, и не можете подчеркнуть, что вам не следует.

1 голос
/ 03 ноября 2011

Как отметил мистер Разочарование, я ожидаю, что IAppointment будет интерфейсом.

Если это действительно класс, вы можете использовать новый модификатор и сделать что-то вроде этого.

public class Job : IAppointment
{    
    new public DateTime End
    {
        get
        {
            //get the value directly from the base class
            return base.End;
        }
        set
        {
            //display your messagebox here

            //then pass the value to the base class
            base.End = value;
        }
    }
}
0 голосов
/ 03 ноября 2011

Прежде всего, ваш вопрос сбивает с толку. IAppointment - это не класс, а интерфейс.

Это ваша ситуация?

  1. Существует интерфейс под названием IAppointment с двумя свойствами, а именно Start и End. (http://www.telerik.com/help/wpf/t_telerik_windows_controls_scheduleview_iappointment.html)
  2. Существует базовая реализация, называемая AppointmentBase (или более производная, Appointment). (* 1 010 *
  3. Вы создаете свой собственный класс, который наследуется от AppointmentBase.
  4. Вы хотите, чтобы установщик AppointmentBase.End показывал блок сообщений, но вы не знаете, как добавить эту логику.

В этом случае у меня хорошие новости.

AppointmentBase только серверы виртуальных членов, так что вы можете легко переопределить свойство Set

class Job : AppointmentBase
{
    public override DateTime End
    {
        get { return base.End; }
        set
        {
            MessageBox.Show("Unbelievable!");
            base.End = value;
        }
    }
}
0 голосов
/ 03 ноября 2011

вы можете написать свойство в своем производном классе, которое в конечном итоге получит и установит свойства базового класса без необходимости переопределения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...