Catel SavableModelBase和继承

时间:2013-10-29 09:07:17

标签: catel

我正在使用SavableModelBase来向/从XML保存/加载配置文件。

我现在有一个案例,我有一些常见的属性,我想重构一个基类。

类似的东西:

class CommonConfig: SavableModelBase<CommonConfig>
{
    /// <summary>
    /// Gets or sets the property value.
    /// </summary>
    public string CommonPath
    {
        get { return GetValue<string>(CommonPathProperty); }
        set { SetValue(CommonPathProperty, value); }
    }

    /// <summary>
    /// Register the Name property so it is known in the class.
    /// </summary>
    public static readonly PropertyData CommonPathProperty = RegisterProperty("CommonPath", typeof(string), string.Empty);
}   

然后我想创建一些与公共配置共享属性的特定配置(例如SpecificConfig)。如果我继承CommonConfig Save()函数,则问题是SpecificConfig无法识别{。}}的属性。

我想我可以使用合成(SpecificConfig将具有类型为CommonConfig的属性),但这看起来/读取效果不佳。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

序列化引擎使用GetType()来获取实际类型。所以你可以使用接口/基类/你想要实际调用Save()方法的任何东西。最后,它将获取实际实时实例类型的属性(因此继承)并保存属于该对象的所有属性,包括基类属性。

换句话说,这应该可以正常工作。

答案 1 :(得分:0)

在上面的场景中使用:

SpecificConfig.Load(myFile, SerializationMode.Xml);

应该返回CommonConfig。可能它返回null,因为文件中的类实际上是SpecificConfig

如果我正在使用:

SpecificConfig.Load<SpecificConfig>(myFile, SerializationMode.Xml);

它按预期工作。