2017-11-25 247 views
2

我希望我的構造函數只接受具有[Serializable]屬性的對象。使構造函數只接受C#中[Serializable]屬性的對象

public MyClass(object obj) 
{ 
} 

喜歡的東西:

public MyClass(? obj) 
{ 
} 

我怎樣才能做到這一點在C#

+0

你確定嗎?那個[Serializable]東西已經很老了,我們現在有更好的方法。 –

+2

簡答:你不能做這個編譯時間。在運行時使用反射並引發異常。 –

+2

@HenkHolterman你可以請ne更具體嗎? – 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_反射。 –

+0

錯誤我的意思是,沒有使用Attribute.IsDefined <_ < –

+0

但我的目標是在編譯時限制它。 – Vahid

相關問題