내 응용 프로그램 중 하나에 여러 개의 컨트롤이 있는데, 모두 분명히 Control 클래스를 확장합니다.인터페이스에 대해 특정 클래스 유형을 적용합니까?
몇 가지 공유 인터페이스가 필요하므로 공유 기능을 다루는 인터페이스를 만들었습니다.
컨트롤의 하위 클래스에만 내 인터페이스를 부여 할 수있는 방법이 있습니까? MyClass에 그것을 제어하지 경우에도 IEmbed을 구현하려고하기 때문에
즉, (의사)
interface IEmbed
class MyControl1 : Control, IEmbed
class MyControl2 : Control, IEmbed
class MyClass : IEmbed
은 이상적으로는, 여기에 실패 할 컴파일러를하고 싶습니다.
잘못된 방식으로 진행되었거나이 동작을 적용 할 수있는 방법이 있습니까?
내가이 동작을 시행하고자하는 이유를 물어 봤는데
편집.
IEmbed 구현을 가져 와서 다른 요소에 자식 컨트롤로 추가하려는 메서드가 있습니다.
모두 좋지만 Controls.Add()는 IEmbed 개체를 거부하고 컴파일되지 않습니다.
나는 컴파일러에게 IEmbed를 구현하는 모든 것이 컨트롤이어야한다고 생각했다.
인터페이스가 Control의 하위 클래스에만 주어져야하는 이유는 무엇입니까? 아마도 그것을 Control으로 다시 캐스팅해야합니까? 그렇다면 인터페이스에 메소드'Control GetControl()'을 추가하기 만하면 인터페이스가 Control의 서브 클래스가 아니어도 연결된 Control을 제공해야하고 캐스트를 피할 수 있습니다. – digEmAll
편집을 참조하십시오. – KingCronus
@digEmAll OP가 모든 구현물을 컨트롤로 만들려고한다면 컨트롤의 하위 클래스를 정확하게 지정해야합니다 (Strillo의 대답 참조). 특정 GUI 프레임 워크에 아무 것도 묶지 않아서 인터페이스가 더 멋지다고 상상해 봅니다. 그러나 그 안에있는''Control GetControl()''메소드는 모든 것을 망가 뜨립니다. –