我想知道.Net框架中大量密封类背后的动机是什么.密封课程有什么好处?我无法理解如何不允许继承有用,而且很可能不是唯一一个与这些类斗争的人.
那么,为什么框架以这种方式设计并且不会是开启一切的不间断的变化?必须有另一个原因,但只是邪恶?
我很好奇为什么System.String是密封的?
我知道,我可以做任何我不需要继承的事情,但仍然 - 为什么?
有很多类本质上是具有特定方法和属性的字符串.这些是标识符,电子邮件,名称等.
面向对象的设计建议将功能封装在特定的类中.在这里,我们有一种奇怪的情况,即最流行的对象框架中最可用的基本类型是不可扩展的.
谢谢.
编辑.
关于不变性的评论.很容易在私有方法中隐藏所有与状态相关的东西,并允许子类具有对类数据的只读访问权限.
// Safe inheritable immutable string (pseudocode).
class String
{
// Private state
private byte[] state;
private void EditState(byte[]) {}
// Protected read-only access to state
protected byte getReadOnlyData() {}
// Available to child classes overridable methods.
protected virtual getHashCode() {}
protected virtual xxx() {}
}
Run Code Online (Sandbox Code Playgroud)
事实上,实际应用程序中的大多数对象都是字符串.所有这些连续出版物,ASIN,IMEI等,以及名称,评论,都是其性质的字符串.我们将它们作为数据库中的字符串,或者在网页上的文本框中键入字符串,或者通过条形码扫描仪等进行封装.
拥有特定功能的字符串,而不是发明多个类,或多或少做同样的事情,这将是非常好,更安全,更优雅.
我知道你不能从一个类继承一次sealed被使用,但我很困惑这两者之间有什么区别:private和sealed?
private如果我们不想继承它们而不是整个类,我们不能使基类成员吗?使用的意义sealed class何在?