C #: проблема события наследования - событие в унаследованном классе всегда равно нулю - PullRequest
1 голос
/ 28 августа 2009

У меня есть 2 типа объектов: родители и дети. У меня есть абстрактный класс для этих двух объектов. Есть 2 типа родителей, ParentA, ParentB, и есть 2 типа детей, ChildA, ChildB. Все они унаследовали свои соответствующие базовые классы, то есть ParentA: Parent, ParentB: Parent, ChildA: Child, ChildB: Child.

У каждого родителя есть коллекция детей. Родители типа A могут иметь только детей типа A, а родители типа B могут иметь только детей типа B.

Чтобы добавить дочерний элемент к родителю, я использую метод addChild (child), определенный в абстрактном классе Parent. Этот метод выполняется одинаково для обоих родительских типов. В этом методе я хотел бы, чтобы родитель подписался на события ребенка. Я использую следующий код:

internal void addChild(Child child)
{
    //Code I execute to add the child

    rChild.ChildPropertyChanged += ChildPropertyChanged;
}

Теперь, когда я выполняю следующий код:

ParentA parentA = new ParentA();
ChildA childA = new ChildA();

parentA.addChild(childA);

и следуйте за событием в объекте childA, я вижу, что после вышеприведенного кода подписки событие все еще равно нулю Почему это событие все еще нулевое?

Ответы [ 4 ]

2 голосов
/ 28 августа 2009

Спасибо всем, но теперь все работает правильно. Я чувствую себя глупо из-за этого, но каким-то образом это вчера ускользало от меня. Действительно, пролемом является линия:

child.ChildPropertyChanged += ChildPropertyChanged;

где ChildPropertyChanged был событием, а НЕ методом. Правильный путь, очевидно, что-то вроде

child.ChildPropertyChanged += OnChildPropertyChanged;

, где OnChildPropertyChanged является методом.

Я конвертирую свой код из VB, где я привык к одной строке, чтобы вызвать событие:)

1 голос
/ 28 августа 2009

Отсутствие какого-либо дополнительного кода - единственная проблема, с которой я могу столкнуться, это то, что вы не можете прикрепить событие к нужному объекту. Может быть, что-то подобное исправит это:

internal void addChild(Child child)
{        
    //Code I execute to add the child        
    child.ChildPropertyChanged += ChildPropertyChanged;
}
0 голосов
/ 28 августа 2009

Пример кода на самом деле не настолько завершен, поэтому трудно догадаться, в чём заключается идентификатор проблемы.

Но может ли быть так, что вы создали новое определение события в классе ChildA, которое скрывает исходное определение события в классе Child?

0 голосов
/ 28 августа 2009

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

В этом случае клиентское событие имеет значение null и, следовательно, родительское событие.

Попробуйте это:

var childA = new ChildA();
var parentA = new ParentA();

childA .PropertyChanged = new ChildAPropertyChangedEventHandler(PropertyChangedMethod);
parentA.AddChild(childA );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...