|
|
1
9
当涉及类型层次结构的C#语言设计决策对您来说似乎不常见时,一个好方法是问自己这样一个问题:“如果有人不告诉我就更改了我的基类,会发生什么?”C#经过精心设计,以降低 脆性基类故障 ,这是一个。
让我们首先考虑阴影方法具有
这向编译器表明: 派生类作者和基类作者正在合作 . 基类作者创建了一个可重写的方法,它是一个 超危险的事情 您不能编写测试该方法所有可能行为的测试用例! 方法的可重写性 必须在中设计
如果我们看到
接下来,让我们考虑阴影方法具有
这种情况怎么会出现?我只想到两种方法。 首先,派生类作者 没有充分研究它们的基类,并且不知道它们刚刚隐藏的方法的存在 极坏的 其次,派生类是 . 现在,派生类作者并非不知道基类 正如原著所写 同样,我们必须警告无知的开发人员,发生了一些他们需要做出重要决定的事情:如果可能的话重写,或者确认隐藏,或者重命名或删除派生类方法。
好吧,假设您是编译器开发人员。以下是当编译器面临缺少的阴影方法时的选择
但我们暂时把它放在一边。如果可能,自动覆盖的其他后果是什么?回想起 . 自动改变的行为 极度危险 与改变行为的危险相比 .
所有设计选择都是仔细权衡许多相互不兼容的设计目标的结果。C#的设计者特别关注在版本化软件组件上工作的大型团队,其中基类可能会以意外的方式更改,团队之间可能无法很好地沟通这些更改。
虚拟方法引入成本;明显的成本是运行时额外的表跳转,以及实现跳转所需的代码。还有一些不太明显的成本,例如:抖动无法将虚拟调用内联到非密封方法,等等。 昂贵的 ,使其选择加入可以降低成本并提高安全性。坦白说,我希望 也是默认值。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |