2013-10-19 5 views
1

인터페이스는 계약과 비슷합니다. 클래스 내에서 구현되면이 클래스에 호출 할 수있는 특정 공개 메소드 세트가 있음을 보증합니다.속성에 대한 인터페이스

나는이 원리를 어떻게 속성에 사용할 수 있을지 궁금해했다. 클래스를 구현할 때이 클래스에 특정 속성 집합이 있음을 보장하는 인터페이스가 있습니다.

Protobuf을 사용 중이므로이 라이브러리를 사용하려면 직렬화하려는 클래스에 특정 속성 (예 : XmlType)이 있어야하지만 다른 유사한 속성도 작동해야합니다. 이 특정 속성을 가진 한 유형이 무엇이든 객체 세트를 조작하고 싶습니다.

+0

AFAIK 현재 .NET 버전에는 그런 기능이 없습니다. 그러나 런타임 검사를 비교적 쉽게 구현할 수 있습니다. – Vlad

답변

2

인터페이스로 어떻게 할 수 있는지 알지 못합니다. 그러나 원하는 속성을 가진 메소드가있는 추상 클래스를 사용하여이를 수행 할 수 있습니다. 이 메소드는 구현되어야하는 abstract 메소드를 호출합니다. 예를 들어 는 :

public abstract class A 
{ 
    [XmlType] 
    public void F() 
    { 
      InnerF(); 
    } 

    protected abstract InnerF(); 
} 

public class B extends A 
{ 
    protected void InnerF() 
    { 
    } 
} 

당연히 또 다른 옵션은, 당신이 정의하는 규칙에 대한 코드를 확인하는 포스트 빌드 도구를 실행 중입니다. 보십시오 here

+0

영리하고 좋은 아이디어! – BartoszKP

+0

필자는 그것에 대해 생각했지만 Protobuf가 상속에 어떻게 작용하는지 내 모델을 복잡하게 만들 것입니다 (관심이 있다면'ProtoInclude' 속성을 찾으십시오). 그러나 그것이 유일한 해결책이라면, 나는 그것을 취할 것입니다. – Max