C# 使用泛型继承和接口定义类
我试图创建一个从ObservableCollection派生的类,并将其自身限制为仅与特定基类(BaseMatadata)一起使用。在向集合添加持久性功能时,它还需要实现IXmlSerializable接口 以下是集合的类定义C# 使用泛型继承和接口定义类,c#,generics,C#,Generics,我试图创建一个从ObservableCollection派生的类,并将其自身限制为仅与特定基类(BaseMatadata)一起使用。在向集合添加持久性功能时,它还需要实现IXmlSerializable接口 以下是集合的类定义 public class CollectionMetadata<T> : ObservableCollection<T> where T : BaseMetadata, IX
public class CollectionMetadata<T> : ObservableCollection<T> where T : BaseMetadata,
IXmlSerializable
{
XmlSchema IXmlSerializable.GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
}
public void WriteXml(XmlWriter writer)
{
}
}
…我得到以下错误
CollectionMetadata<T>.IXmlSerializable.GetSchema()':
containing type does not implementinterface
'System.Xml.Serialization.IXmlSerializable'
我一定错过了一些非常明显的东西?在它的当前形式中,您正在应用
IXmlSerializable
作为对T
的约束;未将其声明为CollectionMetadata
的接口。因此,显式接口实现正在抱怨,因为它找不到接口
您只需将IXmlSerializable
接口移动到约束之前:
public class CollectionMetadata<T> : ObservableCollection<T>, IXmlSerializable
where T : BaseMetadata
公共类集合元数据:ObservableCollection,IXmlSerializable
其中T:BaseMetadata
顺便说一句,使用显式接口实现可能是一件非常好的事情,否则以后可能会让人头疼。因为作为一种公共方法,编译器此时不会抱怨,但如果您试图将集合作为
IXmlSerializable
传递,编译器会抱怨您说t
实现了IXmlSerializable
接口。想必,您实际上是想说collectionmetadata
实现了它:
public class CollectionMetadata<T> : ObservableCollection<T>, IXmlSerializable
where T : BaseMetadata
公共类集合元数据:ObservableCollection,IXmlSerializable
其中T:BaseMetadata
对于ReadXml
和WriteXml
来说,这并不是一个问题,因为即使没有接口,它们看起来也像常规方法。但是,编译器不允许您使用“显式接口实现”,除非您确实实现了这些方法,XmlSchema IXmlSerializable.GetSchema()
是显式接口实现
public class CollectionMetadata<T> : ObservableCollection<T>, IXmlSerializable
where T : BaseMetadata
public class CollectionMetadata<T> : ObservableCollection<T>, IXmlSerializable
where T : BaseMetadata