我在我的一个应用程序中有几个控件,它们都显然扩展了Control类。为界面强制执行某种类别类型?
我需要其中几个具有一些共享接口,所以我创建了一个涵盖共享功能的接口。
有什么办法可以强制我的接口只能被赋予Control的子类吗?
即(伪)
interface IEmbed
class MyControl1 : Control, IEmbed
class MyControl2 : Control, IEmbed
class MyClass : IEmbed
我非常希望编译器在这里失败,因为MyClass的努力来实现IEmbed即使它不是控制。
我是否有过这种错误的方式,或者有没有办法强制这种行为?
编辑
我一直在问我为什么要实施这种行为。
我有一个方法,我想采取任何IEmbed实现并将其作为子控件添加到另一个元素。
这一切都很好,但Controls.Add()拒绝带一个IEmbed对象,并且这不能编译。
我想如果我告诉编译器,任何实现IEmbed的东西都必须是一个控件,它可能工作?
为什么要将接口只给予Control的子类?也许你需要将它转换回Control?如果是这样,只需在调用实例'Control GetControl()'的接口中添加一个方法即使它不是Control的子类,它也必须提供关联的Control,并且可以避免转换... – digEmAll 2012-03-26 08:22:52
请参阅编辑。 – KingCronus 2012-03-26 09:00:05
@digEmAll如果OP意图将所有实现都作为Controls,那么他确实需要子类化Control(请参阅Strillo的答案)。我认为一个接口更好,因为它没有将任何东西绑定到一个特定的GUI框架,但是其中的一个“Control GetControl()”方法打破了这一切。 – 2012-03-26 09:06:58