2009-03-23 4 views
0

내 기본 사용자 인터페이스 클래스를 작성하고 있습니다. 그 (것)들에, 나는 모두에게 유사한 "일반적인"재산 및 방법이 있기 바란다. 인터페이스 클래스를 정의 할 수는 있지만 인터페이스는 추상적 인 메서드 만 허용하고 속성은 허용하지 않는 것으로 보입니다.다른 하위 클래스 유형에 할당 된 공통 속성 및 메서드

각 클래스마다 똑같은 코드를 복사하고 싶지 않지만 구현 방법을 모르겠다 ... 예 : 버튼, 텍스트 상자, 체크 박스, 목록 상자 등의 사용자에게이 공통 항목을 적용하고 싶습니다. 통제 수단.

제안 ???

답변

0

저는 다중 상속이 허용되고 확장 가능하게 사용되는 C++ 백그라운드에서 왔습니다. 그래서 나는 종종 당신과 같은 문제를 겪었습니다. 가장 먼저해야 할 일은 믹스 인에 대해 읽어 보는 것입니다. 여기에서 이름을 밝히지 않고 자신이 사용했던 것을 미리 알게 될 것입니다. 두 번째 단계는 필요할 때마다 믹스 인을 인식하기 시작하는 것이며 믹스를 통해 믹스를 사용할 수도 있다는 것을 알게됩니다. 세 번째 단계는 컴포지션을 사용하여 구현하는 것입니다. 예,이 방법도 싫지만 .NET (또는 Java 또는 ...)을 사용하려면 주변에 방법이 없습니다.

상속을 사용해야하는 대상 왜냐하면 당신의 믹스 인이 아니라 실제로 당신의 물건을 식별하는 물건 때문입니다. 몇 가지 일반적인 컨트롤 (텍스트 상자 등)에 대한 .NET 계층을 살펴 보는 것이 좋습니다. 다른 응답이 좋은, 그리고 트랙에 내가 생각했지만

행운

+0

은 당신에 대한 진정한 멀티 클래스 inhereitance 내가 찾던 더 많은 것이다.나는 그것을 사용하는 클래스마다 동일한 것을 반복하는 각 속성에 대해 동일한 코드를 명시 적으로 넣고 싶지는 않습니다. – DRapp

1

이 상황에서 저는 보통 추상 클래스를 사용합니다. 기본 추상 클래스를 만든 다음 새 컨트롤에서 상속합니다.

0

당신은 인터페이스의 속성을 정의 할 수 있습니다 : interface properties

public interface ISampleInterface 
{ 
    // Property declaration: 
    string Name 
    { 
     get; 
     set; 
    } 
} 
0

당신은 다음과 같은 인터페이스에서 속성을 선언 할 수 있습니다 : 추상 클래스가 될 것 같은

public interface IMyInterface 
{ 
    string Name { get; set; } 
    int Age { get; set; } 
} 

그러나이 상황에서 소리가 난다 보다 나은.

0

이 인터페이스

interface IFoo { 
    string Name { get; set; } 
    string Age { get; } // Read Only 
} 

하지만 그렇지 않으면 당신이 올바른지에 속성을 지정할 확실히 가능합니다. 인터페이스는 동작을 지정하지 않으므로 "추상"메서드와 속성 만 정의 할 수 있습니다. 구현은 모든 단일 구현 자에서 수행되어야합니다. 이것이 인터페이스 유연성에 대한 대가입니다.

모든 자식 클래스간에 동작이 완전히 동일하면 일반적으로 추상 클래스로 이동합니다. 또는 종종 조합. 즉, 해당 인터페이스를 구현하는 기본 구현과 인터페이스를 정의합니다.

class Foo : IFoo { 
    private string _name; 
    public Name { get { return _name; } set { _name = value; } } 
    public Age { get { return 42; } } 
} 

이 당신에게 어떤 이유로 푸에서 파생 할 수있는 클래스를위한 인터페이스를 usincg의 선택과 빠른 구현의 유연성을 할 수 있습니다.

0

.Net에서는 다중 상속을 허용하지 않지만 "상속 계층 구조"를 사용하여 기본 클래스를 구성 할 수 있습니다. 이것은 .NET 자체가 레이아웃 된 방법입니다.