我在我的一個應用程序中有幾個控件,它們都顯然擴展了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