C# 继承和重写基本属性

标签 c# inheritance properties

我目前需要一个自定义 ListViewItem 类 - 我们称它为 MyListViewItem。它需要有一些与每个项目关联的附加数据,并在 Checked 属性更改时执行一些操作。我已经尝试了几件事,但目前相关代码如下所示:

class MyListViewItem : ListViewItem {
    new public bool Checked {
        get {
            return base.Checked;
        }
        set {
            base.Checked = value;
            // do some other things here based on value
        }
    }
    public MyListViewItem(Object otherData) {
        // ...
    }
}

我遇到的问题是,当我单击 ListView 中项目的复选框时,我的 setter 从未被调用。有谁知道我做错了什么?我知道我可以使用父 ListView 的 ItemChecked 事件,但这似乎是一个不太干净的解决方案。 (此外,我实际上并没有将对象传递给构造函数,但这部分在这里并不重要)。

最佳答案

它不起作用,因为“new”关键字没有覆盖它只是“隐藏”。

这意味着如果您在通过 MyListViewItem 的类型定义引用的对象实例上调用 Checked,您运行您的代码。但是,ListView 通过 ListViewItem 的类型定义引用此对象,因此不会调用您的"new"方法。

"new"不是覆盖。更好的解决方案可能是在自定义 ListView 中处理代码。它并没有那么丑。

关于C# 继承和重写基本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858081/

相关文章:

java - 如何从 ant CSV 属性中提取第一个元素

scala - 继承Scala中的apply方法

inheritance - Java EE 6 注解继承之谜

java - 银行计划的转账和提款方式出现问题

iphone - 属性、iVar、访问器方法...?

c# - 当添加的 MIME 类型不适用于 .Net Core 项目的 IIS 时如何进行调试

c# - Xaml 中的展开/折叠菜单

c# - 我的数组声明有什么问题?

c# - 使用 asp.net 成员(member)资格有哪些优点和缺点?

ios - objective-c 中不能复制什么类型