如何提取超类来封装公共代码?

时间:2012-11-20 21:44:12

标签: c# .net oop inheritance superclass

我有一个使用插件的应用程序。在创建了其中几个之后,我发现在这里和那里重复了大量的代码,所以我想提取一个超级“插件库”。

以前的重构我有以下结构:

previous structure

重构后,我有下一个:

current structure

我目前没有找到一种方法来模拟插件引擎具有插件设置类型的属性设置以及插件引擎库< / em>具有插件设置基础类型的属性设置。我觉得应该以某种方式声明插件引擎库的settings属性应该是插件引擎的settings属性的“强制转换”,并模拟它们都是相同的财产。

我不确定问题是否得到了充分解释。随意请求澄清。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用泛型。创建通用基类并将通用参数约束指定为类型PluginSettingsBase

abstract class PluginEngineBase<T>
   where T: PluginSettingsBase
{
   public abstract T Settings { get; set; }
}

继承自PluginsSettings类参数化的基类(因此它继承自PluginSettingsBase

class PluginEngine : PluginEngineBase<PluginsSettings>
{
   public PluginSettings Settings { get; set; }
}

PluginData相同。

答案 1 :(得分:0)

我找到了一种方法:

基类:

class PluginEngineBase
{
    public PluginSettingsBase Settings { get; set; }
}

传承:

class PluginEngine : PluginEngineBase
{
    public PluginSettings Settings
    {
        get
        {
            return (PluginSettings)base.Settings;
        }
        set
        {
            base.Settings = value;
        }
    }
}