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