令人尴尬的遗产问题

JSW*_*ork 1 c# wpf inheritance

情况:
- 我有一个继承自System.Windows.Controls.ItemsControl的第三方控件
- 我有一个名为foo的控件实例
- foo有一个包含5个项目且没有过滤器的ListCollectionView数据源.
- 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

Mar*_*ell 7

听起来他们已经重新宣布了这个属性,即

public new SomeContainer Items { get { ... } }
Run Code Online (Sandbox Code Playgroud)

其有时进行使.Items(等)更具体的; 但是,除非注意覆盖底层实现,否则它会破坏继承.重申他们的主张 - 如果上述内容是正确的,那么他们确实没有以任何方式压倒它; 他们正在重新声明它(这取决于你是如何使用"覆盖",也许).

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