【问题标题】:How to extract a superclass to encapsulate common code?如何提取超类来封装通用代码?
【发布时间】:2023-03-29 03:45:01
【问题描述】:

我有一个使用插件的应用程序。在创建了几个之后,我发现它们上到处重复了一大块代码,所以我想提取一个超级“插件库”。

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

重构后我有下一个:

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

我不确定问题的解释是否充分。随时要求澄清。

谢谢。

【问题讨论】:

    标签: c# .net oop inheritance superclass


    【解决方案1】:

    我发现的一种方法:

    基类:

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

    继承人:

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

    【讨论】:

      【解决方案2】:

      您可以使用泛型。创建泛型基类并将泛型参数约束指定为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 相同。

      【讨论】:

      • 嗯,我没有想到泛型。不错……让我想想。我通常觉得泛型会混淆外部集合以及泛型更自然适合的那种东西,但我会确定一下。谢谢。
      猜你喜欢
      • 2019-03-01
      • 1970-01-01
      • 2015-11-04
      • 2015-11-19
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多