使用 new 隐藏方法的用例

2024-04-16

这或多或少是一个完全相同的副本这个帖子 https://stackoverflow.com/questions/3117838/why-do-we-need-the-new-keyword-and-why-is-the-default-behavior-to-hide-and-not-ov,但由于我无法编辑它,所以我开始了这个。请随意移动某些内容并关闭此内容。

使用 new 隐藏方法似乎是一个危险的功能,并且考虑到另一个线程中的讨论,似乎不仅仅是我在为此找到有效的用例时遇到问题。任何接受 Base 的方法都不会使用 Derived 的方法。

public class Base
{
    public void Method()
    {
        Console.WriteLine("Base");
    }
}

public class Derived : Base
{
    public new void Method()
    {
        Console.WriteLine("Derived");
    }
}

var derived = new Derived();
derived.Method(); // "Derived"
((Base)derived).Method(); // "Base"

那么,有哪些新功能难以用其他功能解决的有效用例呢?


这个想法是为了避免脆弱的基类 https://ericlippert.com/category/brittle-base-classes/问题尽量解决。

假设您提供一个库,而我从您的一个类中派生。我创造了自己的方法,Foo(),并适当地调用它。美好的。

现在您引入库的第二个版本,并添加Foo()方法(具有相同的签名)到基类。现在你的代码将调用Foo(),它有一个特殊的含义......这可能是完全不同对我的意义Foo()方法。默认行为(以及添加new修饰符)是为了让事物按其应有的方式运行:只知道基类的代码将调用您的方法 - 这很好,因为这就是它们的意思。使用具有派生类的编译时类型的表达式的代码将使用my方法 - 没关系,因为这就是they应该也是这个意思(基本上它只能是我的代码,因为只有我的代码知道我的类。)

它应该usually避免 - 它可能会导致微妙的错误,其中更改变量的编译时类型会默默地改变行为......但它是针对这种情况而存在的。基本上,向基类添加方法不应尽可能破坏派生类。

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

使用 new 隐藏方法的用例 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 将对象传递给新表单

    我想做这样的事情 主要表格 Car car new Car create new object Form form2 new Form car Create new form and pass the car that I ve creat
  • 源地图请求导致 404 错误

    更新到 Chrome 29 后 我注意到浏览器尝试从应用程序根目录获取 jquery min map 但在从资产收到之前提出请求 小名声不允许我发布屏幕图像进行校对 当然 我可以在浏览器设置中关闭源映射 如下所示question https
  • LdapConnection SearchRequest 抛出对象不存在错误

    我正在尝试查询 LDAP 服务器以查找 LDAP 用户并将其导入到我的系统中 但是 当我尝试执行此操作时 请求会抛出DirectoryOperationException 说The object does not exist ldapCon
  • 如何使用纯 GDI 对画布区域进行颜色混合(按指定的 alpha 值着色)?

    我想使用纯颜色混合画布区域 按指定的 alpha 值着色 Windows GDI http msdn microsoft com en us library dd145203 28v vs 85 29 aspx 因此没有 GDI Direc
  • PowerShell 脚本将文件(但不包括子文件夹)复制到 SFTP,并在完成后移动到子文件夹

    我正在使用以下脚本将文件从本地文件夹复制到 SFTP 上传文件后 我想将文件移动到子文件夹中 我只想上传以下文件C Users Administrator Desktop ftp文件夹 而不是其他子文件夹中的文件 param backupP
  • 如何防止模型无效?

    我是最佳实践的坚定倡导者 尤其是在角度方面 但我无法使用全新的 validators管道功能应有的样子 情况非常简单 1 个输入通过指令增强 使用 parser formatter还有一些 validators
  • 计数累计和

    我想知道是否可以对计数进行累积和 我想举的一个例子是今年影响美国的风暴 我想要一个列出 2014 年月份的结果集 以及该月之前影响美国的风暴累计总数 我希望得到 3 列的内容 Month NumberofStorms 和 Cumulativ
  • Indy FTP EIAcceptTimeout 异常

    我正在测试 IndyFTP 将文件上传到服务器 这文件已上传但有 0 字节因为出现了 EIdAccessTimeout 异常 Accept timed out 我该如何防止该异常 我的代码是否不正确 代码如下所示 procedure TFo
  • 从 perl 中的外部 *nix 命令获取 STDOUT、STDERR 和响应代码

    我想从 Perl 脚本中执行外部命令 将 stdout 和 stderr 的输出放入 variable我的选择 并将命令的退出代码放入 多变的 我经历过解决方案perlfaq8 http perldoc perl org perlfaq8
  • 打印 JTextField 在控制台上显示空白

    我是Java新手 刚刚尝试了Java的swing 我尝试制作一个登录表单 将JTextField的内容打印到控制台 但是当我尝试它时 控制台没有显示任何内容 这是我的代码 import java awt EventQueue import
  • 如何在角度中对取消订阅功能进行单元测试

    我想找到一种方法来测试订阅和主题上的取消订阅函数调用 我想出了一些可能的解决方案 但每一种都有优点和缺点 请记住 我不想出于测试目的而更改变量的访问修饰符 通过反射访问组件的私有变量 在这种情况下 我有一个存储订阅的私有类变量 组件 ts
  • 将 DIV 包裹在 Anchor 标签或其他标签内

    假设我有一个可点击的复合体div链接到另一个页面的元素结构如下 这就是当前通过点击实现的事情 单击 css 活动状态 更改内部背景颜色 a 标记并重定向到其他页面 我想知道这是否符合 HTML5 验证 或者与用div并使用 JavaScri
  • 如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

    更新到 Xcode 5 后 我的所有应用程序视图中的导航栏都下移了 以下是一些屏幕截图 第一个显示了视图中拉下时的所有内容 第二个显示了所有未受影响的内容 搜索栏应从导航栏开始 有人知道我该如何解决这个问题吗 编辑 我之前尝试过这个建议 i
  • java 应用程序冻结 mac os 10.9 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要帮助 我有 mac os 10 9 并安装了 java JDK 1 7 java 版本 java版本 1 7 0 45 Java T
  • (Django) 事件日历的最佳解决方案

    我需要向我的应用程序添加事件日历功能 我想知道您认为最好的方法是什么 是否有任何有趣的项目提供所需的功能 一个片段 http djangosnippets org snippets 129 http djangosnippets org s
  • 在 Perl 中通过索引从数组中排除元素的最佳方法是什么?

    我使用以下代码来排除中的元素 x 在索引处 index 但我不确定这是实现此功能的最有效方法 大家有什么更好的办法吗 sub arrayexclude my x shift my index shift my keep index 0 sc
  • searchkick 不返回带有空格的结果

    所以我有这个 searchckick 方法 search options misspellings edit distance 2 fields eventname date city order score desc date asc e
  • 如何在 Python 中将输入打印为整数、浮点数或字符串

    我的代码的目的是让输出给出输入的数字和类型 例如 如果输入是 10 输出应该是 10 is an integer 如果输入是 10 0 输出应该是 10 0 is a float 如果输入是 Ten 输出应该是 Ten is a strin
  • 具有可变数量参数的 Python itertools.product

    我正在尝试编写一个模块来使用 itertools product 组合可变数量的列表 我能得到的最接近的是 import itertools lists item1 item2 A b C etc searchterms list iter
  • 使用 new 隐藏方法的用例

    这或多或少是一个完全相同的副本这个帖子 https stackoverflow com questions 3117838 why do we need the new keyword and why is the default beha