【发布时间】:2011-06-25 06:11:42
【问题描述】:
我创建了一个继承自 ComboBox 的自绘用户控件。
控件存储专门的项目,但 Items 集合仍然接受并返回 Object 类型的项目。关于覆盖此集合以确保类型安全的最佳方式的任何提示?
我能想到的唯一方法是创建自己的集合类。该类不会是一个真正的集合——它将一个 ObjectCollection 作为构造函数的参数,并简单地将其方法扩展为。
用户控件会将原始的 Items 集合传递给新类的构造函数。然后重写 Items 属性以返回新类的实例。
这似乎有些令人费解。有没有更好的办法?
【问题讨论】:
-
即使你这样做了,设计师也不会非常关心你的重新实现。你可能无法使用它。为什么首先需要对集合进行强类型化?
-
“可能无法使用它”是什么意思。我确定您知道可以以编程方式添加项目。如果将我的专用类型以外的任何内容添加到列表中,我的代码将崩溃。 (我假设你也知道类型安全的好处。)
-
第二句引用第一句:您可能无法在设计器中使用它。显然,我知道您可以通过编程方式与控件进行交互,但对于大多数习惯于 Visual Studio 特权的开发人员来说,这通常是遥不可及的第二选择。我理解类型安全的好处,我只是担心你在这里失去的东西可能不值得这些好处。控件是在前泛型时代开发的,对此没有特别好的解决方案。隐藏/遮蔽方法不是真正的多态性。
-
@Cody:是的,这是一个简单的任务,最后,我放弃了覆盖 Items 集合。和你一样,我得出的结论是,对此没有特别好的解决方案。
标签: c# winforms inheritance controls ownerdrawn