如何继承构造函数?

2024-05-06

Imagine具有许多构造函数和虚方法的基类

public class Foo
{
   ...
   public Foo() {...}
   public Foo(int i) {...}
   ...
   public virtual void SomethingElse() {...}
   ...
}

现在我想创建一个重写虚拟方法的后代类:

public class Bar : Foo 
{
   public override void SomethingElse() {...}
}

还有一个后代做了更多的事情:

public class Bah : Bar
{
   public void DoMoreStuff() {...}
}

我真的必须将所有构造函数从 Foo 复制到 Bar 和 Bah 中吗?然后,如果我更改 Foo 中的构造函数签名,是否必须在 Bar 和 Bah 中更新它?

没有办法继承构造函数吗?难道就没有办法鼓励代码重用吗?


是的,您必须实现对每个派生有意义的构造函数,然后使用base关键字将该构造函数定向到适当的基类或this关键字将构造函数定向到同一类中的另一个构造函数。

如果编译器对继承构造函数做出假设,我们将无法正确确定对象是如何实例化的。在大多数情况下,您应该考虑为什么有这么多构造函数,并考虑将它们减少到基类中只有一两个。然后,派生类可以使用常量值屏蔽其中一些,例如null并且仅通过其构造函数公开必要的部分。

Update

在 C#4 中,您可以指定默认参数值并使用命名参数来使单个构造函数支持多个参数配置,而不是每个配置都有一个构造函数。

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

如何继承构造函数? 的相关文章

随机推荐

  • 将字符串拆分为单词和标点符号,而不使用任何导入

    我见过与我的问题类似的问题 但它们都使用了正则表达式 我想做的是接受诸如 哇 这真的很有帮助 之类的输入 然后返回到 哇 这真的很有帮助 所以我想将标点符号从单词中分离出来 我已经尝试过这个 但它根本不起作用 sentence input
  • 将 ArgIterator 编组到 va_list

    所以 我想到了尝试 p invoke C 函数va list 我知道如何 p 调用经典的可变参数函数 使用 arglist 在我看来va list就像一个ArgIterator 我认为可以将其传递给该方法 DllImport msvcrt
  • 基于导航历史而不是路线路径的角度面包屑

    有没有办法实现基于导航历史记录的面包屑而不是基于正常路线路径的面包屑 例子 路线 主页 HChild1 HChild1 1 首页 HChild2 HChild2 1 如果用户从主页导航到 HChild2 1 面包屑应该是 首页 HChild
  • 将 WordPress 保持在版本控制中 - 主题的单独存储库

    我的 WordPress 项目位于 Git 下 并将 WordPress 作为子模块 我想将主题开发保留在单独的子模块中 但在当前设置内 将主题设置为子模块时遇到一些困难 这是我的文件系统 git master repo index php
  • Node.js 中的 HTTPS 代理服务器

    我正在开发一个node js代理服务器应用程序 我希望它支持HTTP and HTTPS SSL 协议 作为服务器 我目前正在使用node http proxy https github com nodejitsu node http pr
  • Sinatra 请求对象

    我可能在这里遗漏了一些非常明显的东西 但我似乎无法找到答案 或者自己解决它 在西纳特拉 他们有一个self get方法 捕获块 当调用块时 您可以使用request里面有变量 这怎么可能 Sinatra module Sinatra cla
  • 计算指向 CLLocation 的罗盘航向 - 适用于 iOS 的半正弦函数

    我了解如何获取 2 个 CLLocation 之间的距离 我需要确定从 CLLocation 到另一个 CLLocation 的广义罗盘方位 N NE E 等 在我实现使用半正矢公式推导方位之前 是否有一个通用的开源库或代码片段 您发现可以
  • 如何在 Intellij Idea 12 中重命名/移动项目?

    就像声明的那样here http link sheidaei com mozcw人们可以更改项目的名称 但是 它仅更改项目名称 不会更改文件夹结构 例如 如果您的项目名为sample1并且位于 user1 development IdeaP
  • 在 Ruby 中构建字符串时,为什么铲运算符 (<<) 优于加等于 (+=)?

    我正在通过 Ruby Koans 进行工作 The test the shovel operator modifies the original string公案中about strings rb包括以下评论 Ruby 程序员倾向于使用铲子
  • Galaxy Tab 和 Motorola XOOM 的绘图和布局

    我正在 Galaxy Tab 和 Motorola XOOM 模拟器皮肤上测试我的应用程序 我不明白为什么从错误的文件夹中获取可绘制对象 我有drawable xhdpi 文件夹 我在其中存储大尺寸图片 但是 Tab 从drawable h
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 如何在书架中取出整数钥匙?

    我想在架子上存储一个整数密钥 但是当我尝试将整数密钥存储在搁置中时 它给了我一个错误 Traceback most recent call last File write py line 12 in data id Id id Name n
  • 如何使用QLPreviewPanel?

    我该如何使用QLPreviewPanel 我知道它以前不是公共 API 但在 10 6 中已经有了 如何使用它在标准 QuickLook 面板中显示文件预览 查看快速查看下载器 http developer apple com librar
  • Azure AD 的 MVC/SPA 身份验证方案

    以下是 Azure AD 支持的应用程序类型和场景 Web 浏览器到 Web 应用程序 http msdn microsoft com en us library azure dn499820 aspx BKMK Browser 本机应用程
  • 使用 chrome headless 和 selenium 下载

    我正在使用 python selenium 和 Chrome 59 并尝试自动执行简单的下载序列 当我正常启动浏览器时 下载可以工作 但是当我在无头模式下这样做时 下载不起作用 Headless implementation from se
  • Groovy 安装 HTTPBuilder 现在 Codehaus 关闭了?

    我是一个 groovy n00b 并尝试使用 http builder 但网络上的所有示例都引用相同的内容 Grab声明不起作用 我认为这是因为 codehaus org 不再托管常规内容 我尝试过从以下位置下载源代码github http
  • 在Android中存储和恢复cookie(持久cookie存储)

    搜索了很多 我有一个应用程序 应用程序登录服务器并接收一些cookie 然后它可以使用它们执行一些POST请求 例如获取用户个人资料 我想在会话之间存储它们 这意味着我可以重新启动设备 运行应用程序并获取配置文件 而无需额外登录 或者 换句
  • mysql中相同字符集和排序规则的varchar和nvarchar有什么区别

    谁能告诉我具有相同字符集和整理的 varchar 和 nvarchar 之间有什么区别 例子 varchar CHARACTER SET utf8mb4 COLLATE utf8mb4 unicode ci and nvarchar CHA
  • 将纪元时间转换为日期 PHP

    我现在正在使用一个 API 它提供了一个 epochTime 我已尝试一切方法将此纪元转换为日期 但它似乎不起作用 包括 epoch time 1000然后使用date 函数来转换它 纪元时间看起来像这样 1353430853299 有办法
  • 如何继承构造函数?

    Imagine具有许多构造函数和虚方法的基类 public class Foo public Foo public Foo int i public virtual void SomethingElse 现在我想创建一个重写虚拟方法的后代类