我读了一些文章,但大多数都是抽象的,我的问题得不到回答。 我知道抽象类和密封类之间的区别,但当我的导师解释这一区别时,他说在C#中,当你想让一些开发人员遵循你的设计时,你需要使用抽象类,这会给你的代码提供一些安全性,并给出了一些例子,我理解他的意思,但当他解释密封类时,他说我们不能从string类继承,因为它是密封类。 所以这是使用密封类,并没有给出原因。
String被密封的一个充分理由是,String是一个性能关键类,因为大多数程序都大量使用它。 所以它被大量优化了。 虚拟方法调用有一些额外的开销,因为必须在运行时确定实际调用哪个方法,基类型方法或某些重写。
字符串被密封的另一个可能足够的原因是,字符串可以被“插入”并跨线程共享。
公共语言运行库通过维护一个称为intern pool的表来保存字符串存储,该表包含对程序中以编程方式声明或创建的每个唯一文本字符串的单个引用。 因此,具有特定值的文本字符串的实例在系统中只存在一次。
https://docs.microsoft.com/en-us/dotnet/api/system.string.intern?view=netcore-3.1