2012-11-20 20 views
0

我有一个使用插件的应用程序。在创建其中的几个之后,我发现一大块代码在这里和那里重复着,所以我想提取一个超级“插件库”。如何提取超类来封装通用代码?

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

previous structure

的重构后,我有下一个:

current structure

我目前还没有找到一种方法来模拟插件引擎具有设置的类型插件设置插件引擎基地设置类型插件设置基地。我觉得不知何故应该是一种方式来声明插件引擎基础的设置属性应该是插件引擎的settings属性的“cast”,并对它们都是相同属性的事实进行建模。

我不确定问题是否足够解释。随意要求澄清。

谢谢。

回答

0

的一种方法,我发现:

基类:

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

传承:

class PluginEngine : PluginEngineBase 
{ 
    public PluginSettings Settings 
    { 
     get 
     { 
      return (PluginSettings)base.Settings; 
     } 
     set 
     { 
      base.Settings = value; 
     } 
    } 
} 
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

+0

MMMMM,我没想到的仿制药。尼斯...让我考虑一下。我通常觉得泛型混淆了外部集合,以及那种泛型更适合自然的东西,但我会确保一下。谢谢。 –