C#结构的限制.他们为什么要密封?

C#结构的限制.他们为什么要密封?,第1张

概述参见英文答案 > Why are .NET value types sealed?                                    4个 我有一个问题,抓住结构的概念,没有人能回答我的问题. 我知道它“像”一个对象,你可以有方法和领域. 我不明白的是为什么他们被密封了.为什么缺乏继承和多态性 这限制了他们的能力.结构体是否有真正的现实世界用途,我知道它们比它小 一个对象,我找 参见英文答案 > Why are .NET value types sealed?                                    4个
我有一个问题,抓住结构的概念,没有人能回答我的问题.
我知道它“像”一个对象,你可以有方法和领域.
我不明白的是为什么他们被密封了.为什么缺乏继承和多态性
这限制了他们的能力.结构体是否有真正的现实世界用途,我知道它们比它小
一个对象,我找不到任何可以帮助我理解其好处的真实例子.
谢谢.解决方法 因为结构是一个值;包含float的结构正好是4个字节长.没有object-header指示具体类型是什么:知道类型的东西是编译器(以及生成的IL) – 类型信息在值中不是自包含的.因此,常规多态无法工作.如果你这样做:

MyType type = new MySubType(); // if this was a struct and if this compiled

然后从编译器的角度来看,它的类型是MyType.在分配之后,没有任何概念,这是或者曾经是MySubType.实际上,您可以使用不安全的代码将一个值类型的位强制转换为另一个值.

此外,结构的相同方面意味着您将无法在子类型中添加字段:必须修复大小,这使得这不可能.

基本上,如果你正在考虑继承,你使用的结构不正确;实际上,大多数时候,我看到人们使用结构,他们使用错误.结构应该代表值(理想情况下是不可变的等).

Is there really much real world use for a struct

是;用于表示值 – 例如,Complexnumber类型;对于某些高度优化的场景,GC过高,但只会影响少数开发人员. Here’s one example of this;另一个常见的例子是“游戏”,但是:在更改关键字时,在类和结构之间切换是一个更大的变化.你需要知道自己在做什么,以及为什么要这样做.

你不应该做的是:

// ***BAD CODE: DO NOT DO***public struct Customer{ // I don't need inheritance; a struct will be faster and smaller  // yay me,I'm awesome    public int ID;    public string name;}

以上显然最能代表一类.另外:属性.

I kNow they are smaller than an object

在某些方面,这不是真的;例如,大多数有用的结构都比引用大 – 如果你在堆栈中传递超大的结构而不考虑你在做什么,这可能会有问题.

总结

以上是内存溢出为你收集整理的C#结构的限制.他们为什么要密封?全部内容,希望文章能够帮你解决C#结构的限制.他们为什么要密封?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1224918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存