2017-11-25 241 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

相关问题