【发布时间】:2023-03-22 03:00:01
【问题描述】:
我可以继承 ListViewItem 甚至 ListViewItem.ListViewSubItem,但我不能继承 ListViewGroup。
这是为什么呢?
【问题讨论】:
-
为什么要从 ListViewGroup 派生。你想达到什么目标?
-
标准 ListViewGroup 不支持 v6 常用控件的任何新功能。子类将是扩展组功能的自然方式。
我可以继承 ListViewItem 甚至 ListViewItem.ListViewSubItem,但我不能继承 ListViewGroup。
这是为什么呢?
【问题讨论】:
ListViewGroup 是密封的,因为您无法添加或更改它的功能。该实现在ListViewGroup 中生效。
ListViewGroup 是原生 Win32 控件的友好包装器。你不能继承一个新的类来希望添加功能 - 功能不在类中。
ImageList 被密封的原因是一样的。如果将图像列表分配给ListView,则该图像列表必须是原生 ImageList 控件的包装器,这就是列表视图的方式。您不能从 ImageList 下降以支持 alpha 混合的 PNG 图像列表 - 它只是行不通。
当封装不佳时,这些类是密封的,并且没有任何下降的意义,因为您无法合法地更改任何内容。
【讨论】:
确实没有答案,因为微软会回答“Its by Design”,很多类都是密封的,这使得开发非常困难,在某些情况下,我们使用 Reflector 来了解类家族的工作方式,我们重新创建了自己的类来扩展功能。其中之一是构建验证和错误模板,但是对于这样的问题,除了设计之外没有其他答案。
【讨论】: