【发布时间】:2018-11-30 04:16:30
【问题描述】:
我有一个界面:
interface IProfile { ... }
...还有一个班级:
[Serializable]
class Profile : IProfile
{
private Profile()
{ ... } //private to ensure only xmlserializer creates instances
}
...和一个有方法的经理:
class ProfileManager
{
public T Load<T>(string profileName) where T : class, IProfile
{
using(var stream = new .......)
{
var ser = new XmlSerializer(typeof(T));
return (T)ser.Deserialize(stream);
}
}
}
我希望这样使用方法:
var profile = myManager.Load<Profile>("TestProfile"); // class implementing IProfile as T
...并在此引发编译时错误:
var profile = myManager.Load<IProfile>("TestProfile"); // NO! IProfile interface entered!
但是一切都可以编译,XmlSerializer 只会抛出运行时错误。
我认为where T : class 会确保只接受类类型?
如果输入IProfile(或其他继承自IProfile的接口),是否可以让编译器抛出错误,并且只接受实现IProfile的类型类?
【问题讨论】:
-
XmlSerializer抛出了什么错误? -
@Default 没关系。这里的问题是
T可以是一个接口,即使有一个class约束。 -
@Default: InvalidOperationException{"IProfile 无法序列化,因为它没有无参数构造函数"}
标签: c# .net generics compact-framework