令人尴尬的遗产问题

时间:2011-09-27 20:49:52

标签: c# wpf inheritance

情况:
- 我有一个继承自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 个答案:

答案 0 :(得分:7)

听起来他们已经重新宣布该财产,即

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

有时会使.Items(等)的类型更具体;但是,除非注意覆盖底层实现,否则它会破坏继承。重申他们的主张 - 如果上述内容正确,那么他们确实不会以任何方式覆盖它;他们正在重新声明它(这可能取决于你用“覆盖”的字面意思,或许)。

但是:您可以在任何反射工具或IL检查工具中检查这一点,只需查看属性的声明方式即可。是否有newnewslot