使构造函数只接受C#中[Serializable]属性的对象
问题描述:
我希望我的构造函数只接受具有[Serializable]
属性的对象。使构造函数只接受C#中[Serializable]属性的对象
public MyClass(object obj)
{
}
喜欢的东西:
public MyClass(? obj)
{
}
我怎样才能做到这一点在C#
答
这使我想到的第一件事是通过只允许实现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 <_ class="text-secondary">
+0
但我的目标是在编译时限制它。 – Vahid
你确定吗?那个[Serializable]东西已经很老了,我们现在有更好的方法。 –
简答:你不能做这个编译时间。在运行时使用反射并引发异常。 –
@HenkHolterman你可以请ne更具体吗? – Vahid