c# - 尴尬的继承问题

标签 c# wpf inheritance

情况:
- 我有一个继承自 System.Windows.Controls.ItemsControl
的第三方控件 - 我有一个名为 foo
的控件实例 - foo 有一个 ListCollectionView 数据源,其中包含 5 个项目且没有过滤器。
- foo.Items.Count 给出的结果为 0
- (System.Windows.Controls.ItemsControl)(foo)).Items.Count of 5

发生这种情况的地方:
- XAML.cs 文件的构造函数

发生这种情况时:
- 在 xaml.cs 文件的构造函数中
- 在 InitializeComponent 之后

未经证实的说法:
- 第三方控件的所有者声称它不会以任何方式覆盖项目。

问题:
- 为什么 foo.Items.Count 返回的值与 (System.Windows.Controls.ItemsControl)(foo)).Items.Count 不同

最佳答案

听起来他们已经重新声明了属性(property),即

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

有时这样做是为了使.Items(等)的类型更具体;但是,它确实会破坏继承,除非注意重写底层实现。关于他们的声明 - 如果以上内容是正确的,那么他们确实没有以任何方式覆盖它;他们正在重新声明它(这可能取决于您对“覆盖”的字面意思)。

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

关于c# - 尴尬的继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575484/

相关文章:

java - 确定一个方法是否在运行时覆盖另一个

c++ - 在以抽象基类为参数的函数中将指针和赋值运算符与派生类一起使用

c# - 在 noda time LocalDate 和 Datetime 之间转换的最佳方法?

c# - WPF:命名空间中不存在该名称

wpf - 使用 WPF DataGrid 对 DataTable 进行排序?

c# - 进程启动并显示 C#

c# - 菜单项出现在任务栏上而不是上面

c# - 将匹配多个批量输入的 LINQ 表达式

c# - 在 WPF/C# 中显示时区。发现夏令时偏移

class - 如何在 UML 图中描述 Either/Or 继承?