我有一个界面:
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
被接受吗?
根据MSDN http://msdn.microsoft.com/en-us/library/d5x73970.aspxclass 意味着 T 必须是引用类型;这也适用于任何类、接口、委托或数组类型。
一种解决方法是要求 T 实现无参数构造函数,因此:
where T : class, IProfile, new()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)