Yip*_*Yay 5 c# serialization interface
有人可以解释从ISerializable界面继承和声明对象之间的区别是[Serializable]什么?
我知道在第一种情况下你必须实现ISerializable接口成员,而在第二种情况下,这项工作可能由C#本身完成.
但是对我来说没有意义的是以下行为:
public void Foo<T>() where T : ISerializable
{
// Whatever
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有这样的课:
[Serializable]
public class Value
{
public String Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我不能打电话给我X.Foo<Value>(),因为编译器说:
There is no implicit reference conversion from 'Value' to 'System.Runtime.Serialization.ISerializable'
Run Code Online (Sandbox Code Playgroud)
我很确定这是我对一些显而易见的事情的误解,所以请指出我做错了什么.
如何使where T : ISerializable语句也适用于[Serializable]类?有办法吗?
我想要实现的是编译时错误,如果提供的类型T不可序列化(通过使用[Serializable]或ISerializable方式).
显然,我当前的检查仅处理第二种情况,那么如何让它处理它们呢?
Serializable只是您放置在类上的一个属性,以便让诸如此类的类SoapFormatter知道(通过反射)它可以被序列化。用属性装饰类并不会使类实现接口,这就是编译器在您的情况下抱怨的原因。ISerializable如果没记错的话,如果想要对序列化过程有更多的控制,就可以实现。
| 归档时间: |
|
| 查看次数: |
1620 次 |
| 最近记录: |