泛型,其中 T 是实现接口的类

2024-02-04

我有一个界面:

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(使用前将#替换为@)

泛型,其中 T 是实现接口的类 的相关文章

随机推荐