当前位置:  开发笔记 > 编程语言 > 正文

为什么我们需要结构?(C#)

如何解决《为什么我们需要结构?(C#)》经验,为你挑选了4个好方法。

要使用结构,我们需要实例化结构并像使用类一样使用它.那为什么我们不首先创建一个类?



1> Paul..:

struct是一个值类型,所以如果你创建一个副本,它实际上会物理复制数据,而对于一个类,它只会复制对数据的引用


(直到在结构中嵌入引用类型 - 在哪种情况下它只会复制对该对象的引用)
Novatrust,这不是IP所描述的例外.
对于你我而言,对于对价值和参考类型缺乏了解的人来说,这是一个重要的区别.

2> jason..:

语义之间的主要差异class,并structstruct■找值语义.这意味着如果你有两个相同类型的变量,它们每个都有自己的数据副本.因此,如果给定值类型的变量设置为等于另一个(相同类型),则对一个的操作不会影响另一个(即,值类型的赋值会创建副本).这与参考类型形成鲜明对比.

还有其他差异:

    值类型是隐式的sealed(不可能从值类型派生).

    值类型不能null.

    值类型被赋予一个默认构造函数,将值类型初始化为其默认值.

    值类型的变量始终是该类型的值.将此与类型的变量进行对比,其中类型的变量A可以引用类型的实例,B如果B派生自A.

由于语义的不同,将structs称为"轻量级类" 是不合适的.


@Vince:看看就像这样.如果你有`var x = new SomeClass();`和`var y = x;`那么变异`x`会改变`y`.但是如果你有`var x = new SomeStruct();`和`var y = x;`则不是这样的.

3> nagul..:

在C#中,struct是一种值类型,与引用类型的类不同.这导致它们的处理方式或预期如何使用它们的巨大差异.

你应该读一本书中的结构.C#中的结构不像C++或Java那样是类的近亲.



4> Sam Harwell..:

我在其他答案中看到的所有原因都很有趣并且很有用,但是如果你想了解它们为什么是必需的(至少是VM)以及为什么JVM不支持它们是错误的(用户 -定义的值类型),阅读Demystifying Magic:高级低级编程.就目前而言,C#在谈论将安全的托管代码引入系统编程的潜力时会熠熠生辉.这也是我认为CLI是移动计算的优越平台[比JVM]的原因之一.链接文件中列出了其他一些原因.

重要的是要注意,如果有的话,你很少会看到使用结构时可观察到的性能提升.垃圾收集器非常快,在许多情况下实际上会超过结构.当你添加它们的细微差别时,它们肯定不是首选工具.但是,当您确实需要它们并具有探查器结果或系统级构造来证明它时,他们就可以完成工作.

编辑:如果你想要回答为什么我们需要他们而不是他们做什么,^^^

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有