我想知道我是否可以将同一个类作为知识类添加到多个抽象类中。
我目前的问题是我在同一名称空间中有两个抽象类:
让我们称这个命名空间为“Thing”
我在Thing,Fruit and Vegetable中有两个抽象类。
这两个抽象类都由同一名称空间中的两个不同的类继承,但具有相同的名称。 “番茄”
所以我有两个声明:
namespace Thing
[KnownType(typeof(Tomato))]
public abstract class Fruit {}
public sealed class Tomato: Fruit{}
以及
namespace Thing
[KnownType(typeof(Tomato))]
public abstract class Vegetable {}
public sealed class Tomato: Vegetable{}
类型'Thing.Tomato'无法添加到已知类型列表中,因为已存在具有相同数据协定名称“{datacontractname:Tomato}”的其他类型“Thing.Tomato”。
我已经将Tomato的两个声明重构为它自己的文件,现在只有一个声明。现在一切都会序列化,但是当我查看两个抽象类的自定义属性时,只有其中一个将获得knowntype属性。该类也将是唯一知道它具有Tomato子类的人。
编辑:我对我的重构有点太仓促,因为我需要Tomato来进行多重继承。目前我已将名称空间Thing更改为Thing.Fruit和Thing.Vegetable,保留多个声明。代码的重复使我怀疑这是一个很好的解决方案。
答案 0 :(得分:1)
C#不支持多重继承。 Tomato不能继承Fruit和Vegetable,因此KnownType属性只能由基类使用。
答案 1 :(得分:0)
我决定链接继承几个抽象类,而不是使用多个接口(本来会更好)。我对我们如何进行序列化(大量具有大量遗留内容的代理)以实现多接口继承没有足够的理解。在我原来的例子中,它应该是:
namespace Thing
[KnownType(typeof(Tomato))]
public abstract class Fruit : Vegetable { }
public sealed class Tomato : Fruit{}
namespace Thing
[KnownType(typeof(Tomato))]
public abstract class Vegetable {}
public sealed class Carrot : Vegetable{}