我希望我可以为我的界面做这样的事情
public T GetAStuff() where T is serializable
因此,我想保证实施者返回可序列化的输出
这可以实现吗?感谢。
答案 0 :(得分:3)
不,因为那里没有“可序列化”的通用定义。它很大程度上取决于序列化器,许多要求都是基于属性的,不能表示为通用约束。
BinaryFormatter
只需要[Serializable]
,或者ISerializable
XmlSerializer
需要public
和一个公共无参数构造函数(所以T : new()
会有所帮助),并且可选IXmlSerializable
(但是:它非常罕见,因为它太可怕了)< / LI>
DataContractSerializer
可以使用XmlSerializer
设置,或使用[DataContract]
,但不需要公共无参数构造函数您最好的选择是在运行时检查您需要的特定T
详细信息,或者更简单:只需确保您的单元/集成测试涵盖所需的所有方案。
答案 1 :(得分:1)
public interface IFoo
{
T GetAStuff<T>() where T : ISerializable; // or what ever you need to constrain T to
}
-OR -
public interface IFoo<T> where T : ISerializable
{
T GetAStuff();
}
由于有许多不同的序列化选项,您可能无法限制类型。如果您只需要处理一个序列化选项,那么它就有可能。