【发布时间】:2010-11-30 06:53:09
【问题描述】:
是的,标题没有多大意义,但这是我的情况。
我有两个接口,比如 IGen 和 ITrans。我的一些类实现了 IGen,一些实现了 ITrans,一些实现了两者
ITrans 有一种方法(翻译),而 IGen 有一种方法(生成)。对于同时实现 ITrans 和 IGen Generate 的类只需调用 Translate。
我还有一个接口 IGenAndTrans,它被简单地定义为
public interface IGenAndTrans : IGen , ITrans
{
}
我有一个类(称为 Holder),它具有 IGenAndTrans 作为属性。
[Serializable] //<- Problem
public class Holder
{
public IGenAndTrans GeneratorAndTranslator { get; set;}
}
现在,我想用 [SerializableAttribute] 标记类 Holder 并使用 XmlSerializer。 但是我不能这样做,因为 Holder 有一个接口属性。通常推荐的方法是使 IGenAndTrans 成为一个抽象基类并使用 XmlInclude。我过去成功地做到了这一点。
但是我不确定在这种情况下如何做到这一点。因为我的很多类都实现了 IGen 和 ITrans,所以它们不能简单地从抽象基类继承。这意味着我需要将这些类中的每一个拆分为两个具有相应重复代码的类(因为很多时候生成调用翻译)
有什么建议(如果我能够很好地解释自己的话)?也许我离代码太近了,应该以不同的方式实现它。
【问题讨论】:
-
GeneratorAndTranslator 实际上是工厂方法:为什么要序列化工厂方法?肯定应该根据其他一些序列化信息创建工厂吗?
-
您可以实现
IXmlSerializable并自己处理......尽管我怀疑 Marc Gravell 会提供更好的答案。 -
@silky:在英国可能有点早!
-
@Mitch:但对 Jon Skeet 来说永远不会太早。
-
@Mitch,我不确定你的意思。我希望根据序列化信息填充 GeneratorAndTranslator 属性。如果你能告诉我如何使用工厂模式来做到这一点,我可能会理解你的意思。
标签: .net inheritance serialization interface