2017-11-25 25 views
2

같은 뭔가C#에서 [Serializable] 특성을 가진 객체 만 받아들이도록 생성자를 만듭니다. <code>[Serializable]</code> 속성을 가진 객체 만 받아들이도록 생성자에 요청합니다.

public MyClass(object obj) 
{ 
} 

:

public MyClass(? obj) 
{ 
} 

어떻게 C#으로

+0

는 확실합니까? 그 [Serializable] 물건은 꽤 오래되었습니다, 우리는 지금 더 나은 방법이 있습니다. –

+2

짧은 대답 :이 컴파일 시간을 수행 할 수 없습니다. 리플렉션을 사용하고 런타임시 예외를 throw합니다. –

+2

@HenkHolterman 좀 더 구체적으로 말씀해 주시겠습니까? – Vahid

답변

3

내 마음에 오는 첫번째 것은 ISerializable 인터페이스를 구현하는 객체 만 허용함으로써이 문제를 단순화하는 것이라고 할 수 있습니다 :

public MyClass(ISerializable obj) 
{ 
    // ... 
} 

하지만 너무 단순하다고 생각하지 않습니까?

또는 :

public MyClass(Object obj) 
{ 
    if (!Attribute.IsDefined(obj.GetType(), typeof(SerializableAttribute))) 
     throw new ArgumentException("The object must have the Serializable attribute.","obj"); 

    // ... 
} 

내가 당신도 사용하여 확인할 수 있다고 생각 :

obj.GetType().IsSerializable; 
+2

'obj.GetType()'_is_ Reflection. –

+0

Err 나는 Attribute.IsDefined <_ <0125를 사용하지 않고 의미합니다. <_ < –

+0

그러나 제 목표는 컴파일시 제한하는 것이 었습니다. – Vahid