接口、抽象还是只是虚拟方法?

2024-01-07

我有一堆系统,让我们称它们为A, B, C, D, E, F, G, H, I, J.

它们都有相似的方法和属性。有些包含完全相同的方法和属性,有些可能略有不同,有些可能差异很大。现在,我每个系统都有很多重复的代码。例如,我有一个名为GetPropertyInformation()这是为每个系统定义的。我试图找出哪种方法是减少重复代码的最佳方法,或者以下方法之一可能不是可行的方法:

界面

public Interface ISystem
{
    public void GetPropertyInformation();
    //Other methods to implement
}

public class A : ISystem
{
    public void GetPropertyInformation()
    {
       //Code here
    }
}

Abstract

public abstract class System
{
    public virtual void GetPropertyInformation()
    {
        //Standard Code here
    }
}

public class B : System
{
   public override void GetPropertyInformation()
   {
      //B specific code here
    }
}

超级基类中的虚拟方法

public class System
{
   public virtual void GetPropertyInformation()
    {
     //System Code
    }
}

public class C : System
{
  public override void GetPropertyInformation()
  {
      //C Code
  }
}

有一个问题,尽管可能很愚蠢,但让我们假设我采用了抽象方法,并且我想覆盖GetPropertyInformation,但我需要向它传递一个额外的参数,这可能吗?还是我必须在抽象类中创建另一个方法?例如,GetPropertyInformation(x)


您的抽象方法和“超级基类”方法并没有太大不同。您应该始终使基类抽象,并且可以提供默认实现(虚拟方法)或不提供默认实现(抽象方法)。决定因素是您是否想要拥有基类的实例,我认为不需要。

所以它位于基类和接口之间。如果您的 A、B C 类之间存在强耦合,那么您可以使用基类和可能的通用实现。

如果 A、B、C 类自然不属于单个“系列”,则使用接口。

And System不是一个好名字。

并且覆盖时无法更改参数列表。也许默认参数可以提供帮助,否则您只需要 GetPropertyInformation() 的 2 个重载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口、抽象还是只是虚拟方法? 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • ruby 中的大括号与前面的字符匹配

    我在这里阅读了很多关于使用 Regexp 在 Ruby 中匹配嵌套大括号的文章 然而我无法适应我的情况 我陷入了困境 Ruby 1 9 书中使用以下内容来匹配一组嵌套大括号 A
  • DefaultSelenium 和 RemoteWebDriver 有什么区别?

    RemoteWebDriver 是 Selenium 2 0 中 DefaultSelenium 的替代品还是两者可以结合使用 RemoteWebDriver 只是用于连接到远程 selenium 服务器的驱动程序 您可以将 WebDriv
  • 忽略我对文件的更改,但不要从远程代表中删除它们

    我的工作目录中有几个文件存在于远程代表中 我总是出于特定原因更改它们 是否可以使 git 在提交时忽略这些文件 同时这些文件不应从远程代表中删除 当我从远程代表中提取更改时 不应合并这些文件 是否有可能做到这一点 P S git updat
  • 缺少“部署”按钮 Visual Studio 2012

    昨天 我已在 SharePoint 2013 开发计算机上安装了 Visual Studio 2012 Premium 我还安装了 Office 开发人员工具来获取 SP2013 项目模板 打开我的 SP 2010 解决方案文件并成功转换为
  • IPython笔记本上CSV文件的SQL语句

    我有一个tabledata csv文件和我一直在使用pandas read csv阅读或选择具有特定条件的特定列 例如 我使用以下代码来选择所有 名称 session id 1 它在数据科学家工作台上的 IPython Notebook 上
  • python list(zipobject) 返回空(列表)容器[重复]

    这个问题在这里已经有答案了 我在 Python 3 4 3 中遇到了一个奇怪的问题 而且似乎没有在任何地方提到它 可以说 a 1 2 3 4 and b 5 6 7 8 要垂直连接这些 ab zip a b 在Python 3中 ab本身会
  • React Context 未将类更新为值

    我有一个使用类实例作为上下文值的上下文 在我更新了类实例之后 这种变化不会反映在消费者身上 消费者仍然可以获得旧类别的价值 有人可以指出我如何实现这一目标的方向吗 Service class class Service name oldNa
  • Spring Cloud Zuul代理网关不从Spring Boot应用程序加载css、js

    我使用 Spring Cloud Zuul 代理创建了一个网关应用程序 网关应用程序工作正常 但它没有加载静态文件 如 img css 和 js 文件 我在我的中添加了以下设置应用程序属性我的网关应用程序的文件 zuul routes de
  • SQLAlchemy Core 和 ORM 有什么区别?

    两者的目的有什么区别SQLAlchemy 核心 http docs sqlalchemy org en latest core and SQLAlchemy ORM http docs sqlalchemy org en latest or
  • 如何将上下文菜单附加到 Chromium 浏览器

    我有一个来自 Delphi Chromium Embedded 的 TChromium broser http code google com p delphichromiumembedded 我想为其附加一个上下文菜单 我怎样才能做到这一
  • 如何在 WinUI 3 桌面中使用 Prism MVVM

    我是 WinUI 3 和 PRISM 库的新手 WinUI 3 中是否支持 PRISM 库 如果答案是 是 那么哪个图书馆是 进行初步搜索后 我看到 Prism Uno 支持 WinUI 3 我的理解正确吗 为了尝试示例 我完成了以下步骤并
  • 在比较函数中使用非静态类成员

    我目前正在开发一个语法分析器类 它需要在代码的某个点对包含运算符信息的结构进行排序 每个运算符都有一个优先级 这是用户通过我的分析器类的公共成员函数定义的 因此 在排序时 我需要排序函数根据相应运算符的优先级对元素进行排序 我使用以下代码来
  • python - 如何将日期时间对象舍入到最近的前一刻钟?

    假设我有日期时间对象 我希望它们四舍五入到最近的前一刻钟 2014 07 18T14 23 12 gt 2014 07 18T14 15 00 2014 07 18T14 14 59 gt 2014 07 18T14 00 00 2014
  • 高效克隆缓存对象

    我们有一个应用程序 可以对数据对象进行比较 以确定对象的一个 版本是否与另一个版本不同 我们的应用程序还对这些对象进行了一些广泛的缓存 并且在进行这些比较时我们遇到了一些性能问题 这是工作流程 数据项 1 是内存中的当前项 该项目最初是从缓
  • VC++ Visual Studio 在子目录中添加了 .hpp 文件,但出现“错误:无法打开源文件...”

    这让我抓狂 我在现有 VC 项目源目录的根目录中的子目录中添加了许多 hpp 文件 Visual Studio 抱怨 错误 无法打开源文件 但如果我右键单击并选择打开文档 VS 可以显示它 我试过了 重新扫描解决方案 似乎什么也没做 添加现
  • 是否有一种非 Java 跨平台方式来启动特定文件类型的关联应用程序?

    First 我找到了一对 https stackoverflow com questions 550329 how to open a file with the default associated program of java具体问题
  • 如何将现有的 3rd-party Jars 集合上传到 Gradle 中的 Maven 服务器?

    如何将现有 Jars 集合上传到 Maven 存储库 这些 Jars 是从导入到 Gradle 的 ANT 任务构建的 并用作我的任务的依赖项 这些 Jars 没有版本标签 因此它们在上传时应该都会收到相同的版本号 apply plugin
  • AngularJS 相当于 Angular ng-container

    这里是 AngularJS 的 Angular 等价物吗ng 容器 https angular io guide structural directives ngcontainer 或者我应该用嵌入指令自己创建一些东西 示例用例 具有交错的
  • MySQL:约束两列,因此其中一列始终为 NULL

    我有一个表 其中的两列引用了另外两个表 PK 有没有办法可以限制这两列设置值 我只希望其中一个设置值 而另一个为 NULL 收藏夹 id table 1 id table 2 id Table 1 id Table 2 id 在 SQL 中
  • 接口、抽象还是只是虚拟方法?

    我有一堆系统 让我们称它们为A B C D E F G H I J 它们都有相似的方法和属性 有些包含完全相同的方法和属性 有些可能略有不同 有些可能差异很大 现在 我每个系统都有很多重复的代码 例如 我有一个名为GetPropertyIn