为了账号安全,请及时绑定邮箱和手机立即绑定

何时使用vsref vsout

何时使用vsref vsout

C#
心有法竹 2019-07-13 18:59:33
何时使用vsref vsout前几天有人问我,他们什么时候应该使用参数关键字?out而不是ref..而我(我想)理解ref和out关键词(这已经是问过最好的解释似乎是ref == in和out,我应该经常使用的(假设的或代码)示例是什么?out而不是ref.自ref是比较普遍的,你为什么要用out?这只是语法糖吗?

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

使用OUT表示参数没有被使用,只被设置。这有助于调用者理解您总是在初始化参数。

此外,ref和out不仅适用于值类型。它们还允许您重置引用类型从方法中引用的对象。


查看完整回答
反对 回复 2019-07-13
?
三国纷争

TA贡献1804条经验 获得超7个赞

你在语义上是对的,ref同时提供“in”和“out”功能,而out只提供“Out”功能。有一些事情需要考虑:

  1. out

    要求接受参数的方法必须在返回之前的某个时候为变量赋值。您可以在一些键/值数据存储类中找到这种模式,如

    Dictionary<K,V>

    ,您的功能如下

    TryGetValue

    ..此函数接受一个

    out

    参数,该参数保存如果检索到的值。调用者传递一个值是没有意义的

    这个函数,所以

    out

    用于保证调用后变量中的某些值,即使它不是“真实”数据(在

    TryGetValue

    钥匙不在的地方)。
  2. out

    ref

    参数在处理互操作代码时被不同地封送。

另外,重要的是要注意,虽然引用类型和值类型在其价值的性质上有所不同,应用程序中的每个变量都指向持有值的内存位置。,甚至对于参考类型也是如此。只是碰巧,对于引用类型,内存位置中包含的值是另一个内存位置。当将值传递给函数(或执行任何其他变量赋值)时,该变量的值将复制到另一个变量中。对于值类型,这意味着复制类型的整个内容。对于引用类型,这意味着复制了内存位置。无论哪种方式,它都会创建包含在变量中的数据的副本。这所拥有的唯一真正相关性是处理赋值语义;当分配变量或通过值传递(默认值)时,当一个新赋值被分配给原始(或新)变量时,它不会影响其他变量。在引用类型的情况下,是的,对实例都是可用的,但这是因为实际的变量只是另一个内存位置的指针;变量的内容-内存位置-实际上并没有改变。

带着ref关键字表示两个原始变量函数参数实际上指向相同的内存位置。这同样只影响赋值语义。如果将一个新值分配给其中一个变量,则由于其他值指向相同的内存位置,新值将反映在另一侧。


查看完整回答
反对 回复 2019-07-13

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号