generics,其中T是类实现接口

我有一个界面:

interface IProfile { ... } 

……和一个class级:

 [Serializable] class Profile : IProfile { private Profile() { ... } //private to ensure only xmlserializer creates instances } 

…和一个方法经理:

 class ProfileManager { public T Load(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("TestProfile"); // class implementing IProfile as T 

…并在此处抛出编译时错误:

 var profile = myManager.Load("TestProfile"); // NO! IProfile interface entered! 

但是,所有内容都会编译,并且XmlSerializer仅抛出运行时错误。

我认为where T : class会确保只接受类类型?

如果IProfile (或inheritance自IProfile其他接口),是否可以使编译器抛出错误,并且只接受实现IProfile类型类?

根据MSDN类意味着T必须是引用类型; 这也适用于任何类,接口,委托或数组类型。

一个解决方法是要求T实现参数less构造函数,所以:

 where T : class, IProfile, new()