현재 일부 필드가있는 일종의 사용자 지정 .NET을 만들어야하는 도구에서 작업하고 있습니다. 내가 어떤 접근 방식은이 문제를 해결하는 것이 좋습니다 궁금했는데, 다음과 같은 옵션에서 생각하고 :.NET 컨트롤 기능 확장
옵션 A : - 각 컨트롤에 대한 파생 클래스를 만듭니다 (의 말을하자 CLabel, CGroupBox ...) 여기서 각 클래스의 새 필드를 정의합니다. 이것은 의 악영향을 의미하지만으로 작동하기 쉽습니다.
예 :
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
옵션 B : -이 옵션은 각 컨트롤에서 파생 클래스를 생성하지만, 실제 라벨, 그룹 상자 등의 컨트롤을 사용하여 캡슐화하는 클래스를 생성하지 의미 모든 "추가"속성. 이 여분의 속성 개체는 Control.Tag
속성에서 참조됩니다. Tag
속성 내에서 일종의 복잡한 객체를 참조하는 것이 나에게 약간의 기이함을 느끼기 때문에이 질문에 대한 의문점이 있지만이 은 더 나은 유지 가능성을 의미 할뿐 아니라 컨트롤 서브 클래 싱을 필요가 없습니다..
예 :
Label lbl = new Label();
lbl.Tag = new ControlDescription();
옵션 C : -이 유형의 ControlDescription 필드를 추가 예를 CLabel을 위해, 옵션 A와 B는 그냥 사용자 지정 컨트롤을 만드는 조합의 일종을 가지고 의미 Label 컨트롤에 추가합니다. 이렇게하면 캡슐화와 mantainability가 보장되지만 Tag
것은 피할 수 있습니다.
저는 그보다 훨씬 많은 옵션이 있다는 것을 확신합니다. 아마 다형성 - 아마도 내가 가진 문제 -를 가지고있는 것만으로도 커스텀 컨트롤 클래스를 없앨 수있다. 그 중에서 가장 좋은 옵션은 무엇입니까? 이 모든 것이 더 잘 될 수 있다고 생각합니까?
감사합니다. 이것 또한 살펴 보겠습니다. –