2016-06-03 5 views
0

특정 속성이있는 클래스의 확장 방법을 갖고 싶습니다.특정 속성이있는 클래스의 확장

명확히하기 위해 객체를 직렬화해야합니다. 하지만이 사용자 지정 특성을 가진 개체를 serialize하는 경우에만 싶습니다. 다른 기본 클래스를 상속하여이 작업을 수행 할 수 있음을 알고 있지만 클래스 속성이 이미 있으며 더 우아 할 것이라고 생각하므로 개체가 사용자 지정 직렬화 가능 여부를 항상 볼 수 있습니다. 추천

예시 :

[CustomAttribut]public MyClass{} 

MyClass o = new MyClass() ; 
// should only exist if class has attribut CustomAttribut. 
O.CustomSerialize(); 
+0

무엇을 이미 시도 했습니까? –

+0

좋은 해결책을 찾지 못했습니다. 이 확장을 가진 다른 클래스로부터 상속을받은 것뿐이었습니다. – Franki1986

답변

4

속성은 메타 데이터 저장 용으로 - 정적 CONST 및 컴파일 시간에 알려진 값. 클래스에 메소드/필드를 추가 할 수 없습니다. 인터페이스는이를 수행하기위한 것입니다. 당신이 할 수있는 일은 인터페이스를 만드는 것입니다 :

public interface ICustomSerializable{ 
    string CustomSerialize(); 
} 

또 다른 옵션은 클래스를 직렬화 로직과 분리하는 것입니다. 직렬화는 다른 클래스에 의해 처리됩니다. 예 :

public class CustomSerializer{ 

    public string CustomSerialize(object myObject){ 
     // for example if object has no CustomAttribut attribute 
     // you can throw "not serializable" exception here. 

    } 
} 
+0

여기에 포스트 샤프의 예가 있습니까? – Franki1986

+0

PostSharp는이 경우 잔인한 행동입니다 (단,'[CustomAttribut]'로 주석을 달아 놓은 수업을 제외하고는 무엇을하고 있는지 알 수는 없습니다) –

0

일반 .NET에서는이를 수행 할 수 없습니다. AOP 또는 Aspect Oriented Programming이라고합니다.

이러한 옵션을 제공하는 PostSharp과 같은 몇 가지 타사 공급자가 있습니다.

+0

그게 답이 아니라 만족스럽지 않습니다. 고맙습니다. 제한. 하지만 인터페이스를 사용할 것입니다. 괜찮습니다. – Franki1986

관련 문제