我有一个接口:
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