Вопрос о смущающем наследовании - PullRequest
1 голос
/ 28 сентября 2011

Ситуация:
- У меня есть сторонний элемент управления, который наследуется от System.Windows.Controls.ItemsControl
- У меня есть экземпляр этого элемента управления с именем foo
- foo имеет источник данных ListCollectionView с 5 элементамии без фильтра.
- foo.Items.Count дает результат 0
- (System.Windows.Controls.ItemsControl) (foo)). Items.Count 5

Где это происходит:
- Конструктор файла XAML.cs

Когда это происходит:
- В конструкторе файла xaml.cs
- После InitializeComponent

Непроверенные утверждения:
- Владелец стороннего элемента управления утверждает, что он никоим образом не переопределяет элементы.

Вопрос:
- Почему foo.Items.Count возвращает значение, отличное от (System.Windows.Controls.ItemsControl) (Foo)). Items.Count

1 Ответ

7 голосов
/ 28 сентября 2011

Похоже, что они повторно объявили свойство, то есть

public new SomeContainer Items { get { ... } }

, что иногда делается для того, чтобы тип из .Items (и т. Д.) Был более конкретным;однако он нарушает наследование, если только не предприняты меры для переопределения базовой реализации.В отношении их утверждения - если вышеупомянутое верно, то действительно, они не отменяют это каким-либо образом;они повторно объявляют его (возможно, это зависит от того, насколько буквально вы находитесь с «переопределением»).

Но: вы можете проверить это в любом инструменте отражения или инспекторе IL, просто посмотрев, каксобственность объявлена.Есть ли у него new или newslot и т. Д.

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