将类传递给函数或带引用的结构体之间的功能区别是什么?

问题描述:

所以,我研究的Structs VS类。到目前为止,我了解以下内容:将类传递给函数或带引用的结构体之间的功能区别是什么?

类可以直接当传递给另一个函数中修改数据。 类比Struct更多地使用内存。

的Structs可以传递给函数,但数据在函数内克隆和不修改原始数据。

所以,如果我使用一个类,我可以将数据类中直接从新功能传递给一个函数和修改数据。

如果我使用一个结构,我可以将数据传递给一个函数,这使得在函数中使用的数据的一个副本,但不影响原始数据。

然而,如果我通过一个结构与ref关键字的函数,随后修改结构内的原始数据。

考虑到这一点,就是使用结构用ref关键字,或只使用一个类之间的主要区别?它与纯粹的记忆有关吗?我一直在使用结构体,但是我需要修改原始数据 - 努力工作,如果它是更好地通过结构用ref关键字,或我的所有的结构更改为类。

+4

[类和结构之间进行选择(https://social.msdn.microsoft.com/Search/en-US?query=struct%20vs&pgArea=header&emptyWatermark=true&ac=3#refinementChanges=117&pageNumber=1&showMore=false)请阅读[问]并参加[tour] – Plutonix

+4

简单的经验法则:只要使用类,直到出现一个结构显然更好的情况。 –

+1

那么,如果你的数据类型_usually_需要成为一个引用类型,那么把它变成一个类。如果_usually_被用作值类型,则将其设为一个结构体,并且在需要传递引用的几次时,将其标记为'ref'。 – Sweeper

这是一个非常混乱的问题。这里有一些指导方针可以帮助你做出决定:

  • 你的默认位置应该是在一个结构上使用一个类。
  • 尤其是,如果在类型的数据旨在突变,你几乎总是需要一个类。可变结构在C#中是不好的练习。在一些罕见的情况下,他们是合理的;那些罕见的情况是罕见
  • 特别是,如果类型中有很多字段 - 比如多个双精度浮点数或几个引用,那么几乎总是需要类。大型结构可能非常低效,因为它们默认通过值复制,而不是通过引用复制。有一些罕见的情况下,大型结构是合理的。那些罕见的情况是罕见
  • 特别是,如果您的类型不是逻辑上的 - 就像一个数字,坐标或日期等等 - 那么它应该是一个类,而不是一个结构。
  • 尤其是,如果你的类型的类型层次参与,那么它必须是一个类,而不是一个结构。

将Struct与Ref关键字结合使用或仅使用Class的关键区别是什么?

这是看结构和类之间差异的错误方法。 如果你是为了修改它的字段传递一个结构由参,你可能做错了什么。字段应该是私有的,结构应该是不可变的。

使用任何 REF参数,并通过引用传递对象之间的主要区别在于,前者是一个可变的别名,而后者是到对象的引用。我很遗憾,ref是C#设计团队对该功能语法的选择,因为它令人困惑。你不应该把它当作传递参考。你应该把它想象为别名变量。在幕后它将一个托管指针传递给变量是一个实现细节。混叠行为就是语义。