gpt4 book ai didi

c# - 定义具有泛型继承和接口(interface)的类

转载 作者:行者123 更新时间:2023-11-30 22:26:49 24 4
gpt4 key购买 nike

我正在尝试创建一个派生自 ObservableCollection 的类,并将其自身限制为仅与特定基类 (BaseMetadata) 一起使用。它还需要实现 IXmlSerializable 接口(interface),因为我正在向集合中添加持久性功能。

这是集合的类定义...

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)
{
}
}

...BaseMetadata 可以简化为一个空类,但仍然会产生错误...

public class BaseMetadata
{
}

...我收到以下错误....

CollectionMetadata<T>.IXmlSerializable.GetSchema()': 
containing type does not implementinterface
'System.Xml.Serialization.IXmlSerializable'

...在上面代码的下一行...

XmlSchema IXmlSerializable.GetSchema()

我一定是遗漏了一些非常明显的东西?

最佳答案

在当前形式中,您正在应用 IXmlSerializable作为对 T 的约束;没有将其声明为 CollectionMetadata<T> 的接口(interface).所以你的显式接口(interface)实现是在提示,因为它找不到接口(interface)。

你只需要移动 IXmlSerializable 约束之前的接口(interface):

public class CollectionMetadata<T> : ObservableCollection<T>, IXmlSerializable
where T : BaseMetadata

作为旁注 - 您为此使用显式接口(interface)实现可能是一件非常好的事情,否则这可能会在以后成为一个真正的难题。因为作为公共(public)方法,编译器此时不会提示,但如果您尝试将集合作为 IXmlSerializable 传递,编译器会提示。 .

关于c# - 定义具有泛型继承和接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com