猿问

何时使用vsref vsout

何时使用vsref vsout

前几天有人问我,他们什么时候应该使用参数关键字?out而不是ref..而我(我想)理解refout关键词(这已经是问过最好的解释似乎是ref == inout,我应该经常使用的(假设的或代码)示例是什么?out而不是ref.

ref是比较普遍的,你为什么要用out?这只是语法糖吗?


心有法竹
浏览 443回答 3
3回答

慕妹3146593

使用OUT表示参数没有被使用,只被设置。这有助于调用者理解您总是在初始化参数。此外,ref和out不仅适用于值类型。它们还允许您重置引用类型从方法中引用的对象。

三国纷争

你在语义上是对的,ref同时提供“in”和“out”功能,而out只提供“Out”功能。有一些事情需要考虑:out要求接受参数的方法必须在返回之前的某个时候为变量赋值。您可以在一些键/值数据存储类中找到这种模式,如Dictionary<K,V>,您的功能如下TryGetValue..此函数接受一个out参数,该参数保存如果检索到的值。调用者传递一个值是没有意义的进这个函数,所以out用于保证调用后变量中的某些值,即使它不是“真实”数据(在TryGetValue钥匙不在的地方)。out和ref参数在处理互操作代码时被不同地封送。另外,重要的是要注意,虽然引用类型和值类型在其价值的性质上有所不同,应用程序中的每个变量都指向持有值的内存位置。,甚至对于参考类型也是如此。只是碰巧,对于引用类型,内存位置中包含的值是另一个内存位置。当将值传递给函数(或执行任何其他变量赋值)时,该变量的值将复制到另一个变量中。对于值类型,这意味着复制类型的整个内容。对于引用类型,这意味着复制了内存位置。无论哪种方式,它都会创建包含在变量中的数据的副本。这所拥有的唯一真正相关性是处理赋值语义;当分配变量或通过值传递(默认值)时,当一个新赋值被分配给原始(或新)变量时,它不会影响其他变量。在引用类型的情况下,是的,对实例都是可用的,但这是因为实际的变量只是另一个内存位置的指针;变量的内容-内存位置-实际上并没有改变。带着ref关键字表示两个原始变量和函数参数实际上指向相同的内存位置。这同样只影响赋值语义。如果将一个新值分配给其中一个变量,则由于其他值指向相同的内存位置,新值将反映在另一侧。
随时随地看视频慕课网APP
我要回答