情况:
- 我有一个继承自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
答案 0 :(得分:7)
听起来他们已经重新宣布该财产,即
public new SomeContainer Items { get { ... } }
有时会使.Items
(等)的类型更具体;但是,除非注意覆盖底层实现,否则它会破坏继承。重申他们的主张 - 如果上述内容正确,那么他们确实不会以任何方式覆盖它;他们正在重新声明它(这可能取决于你用“覆盖”的字面意思,或许)。
但是:您可以在任何反射工具或IL检查工具中检查这一点,只需查看属性的声明方式即可。是否有new
或newslot
等