JSWork
JSWork

Reputation: 1035

Embarrassing Inheritance Question

Situation:
- I have a third party control that inherits from System.Windows.Controls.ItemsControl
- I have an instance of this control called foo
- foo has a ListCollectionView datasource with 5 items and no filter.
- foo.Items.Count gives a result of 0
- (System.Windows.Controls.ItemsControl)(foo)).Items.Count of 5

Where this happens:
- A XAML.cs file's constructor

When this happens:
- In the xaml.cs file's constructor
- After InitializeComponent

Unverified claims:
- The owner of the third party control claims that it does not override Items in any way.

Question:
- Why does foo.Items.Count return a different value than (System.Windows.Controls.ItemsControl)(foo)).Items.Count

Upvotes: 1

Views: 155

Answers (1)

Marc Gravell
Marc Gravell

Reputation: 1064104

It sounds like they have re-declared the property, i.e.

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

which is sometimes done to make the type of .Items (etc) more specific; it does, however, break inheritance, unless care is taken to override the underlying implementation. Re their claim - if the above is correct then indeed they aren't overriding it in any way; they are re-declaring it (it depends on how literal you are being with "override", perhaps).

But: you can check this in any reflection tool or IL inspection tool, simply by looking at how the property is declared. Does it have a new or newslot, etc.

Upvotes: 7

Related Questions