繁体   English   中英

如何使用参数并在C#中返回?

[英]How do I use parameters and return in C#?

对于我一生来说,我浏览的每个教程,所看的每个视频,所读的每本书,我都无法理解这些东西是如何工作的。

我看到按值传递值,按引用值传递,按值引用,按引用传递。 有人可以通过最基本的例子帮助我理解这些吗?

关于返回类型的相同问题。 它们如何工作?

您将发现的最佳资源是Jon Skeet 在C#中传递的参数 它给出了非常清晰的解释。 如果在阅读后仍然有疑问,则应尝试更具体地询问他们,以便于帮助。

让我们备份一下,从变量开始。

变量始终包含一些特定信息。 对于值类型,包含的信息直接是整个值。 对于引用类型,所包含的信息仅是对实际值所在的其他内存位置的引用。

在.Net中,您可以假装变量仅以一种方式真正传递给函数或从函数返回:按值。 现在暂时不要通过引用传递-它只会使事情变得混乱。 当按值传递变量时,该变量直接保留的全部信息将复制到该函数。 诀窍是要了解这对于引用类型意味着什么,就是简单地获取引用的副本。

我可以用一个简单的代码示例进行演示:

void Test(int x, dynamic y)
{
    x = 3; 
    y.a = "four";
    y.b = "five";
    y = new {a = "six", b = "seven"}; // this will have no effect outside the function
}

int x = 2; // value type
var y = new {a = "one", b="two"}; //reference type

// both x and y are passed by value, but y is a reference type so the reference itself is copied
Test(x, y);

Console.WriteLine(x);  //writes 2, because the test function is working with a copy
Console.WriteLine(y.a); //writes four
Console.WriteLine(y.b); //writes five

对于引用类型,可以强制使用真正的“按引用传递”,但是除非您真正了解发生了什么,否则绝对不要这样做 看起来像这样:

void Test(ref dynamic y)
{
   y = new {a = "three", b="four"};
}

var y = new {a = "one", b="two"};
Test(y);

Console.WriteLine(y.a); //prints one
Console.WriteLine(y.b); //prints two

输出仍然是“一个”和“两个”,因为该函数替换了局部变量的引用。 调用该函数的代码仍具有对原始存储位置的引用,因此将输出原始值。

首先,您只会看到按值传递或按引用传递。 没什么 现在了解这个概念,想象一下您有一组标有1,2,3,4等的数字盒。这些盒包含一些数据。 然后想象一下,您有一张陈述相同内容的文件列表,即一个具有1,2,3,4的索引。

现在,您要将盒子的内容(数据)之一传递给您的朋友。 您可以通过以下两种方式之一进行操作。

  1. 通过价值传递您的朋友选中您的盒子,然后将其复制到他的盒子/硬盘中。 假设您的朋友需要更改此数据。 如果这样,您的原始框将不会受到影响,因为他更改了框中的数据。

  2. 通过引用传递您只需将盒子的地址提供给您的朋友,您的朋友将使用您的盒子而不是复制它。 如果他修改了数据,它将在您的框中,您的原始数据将被更改。

在了解返回类型之前,您必须了解数据类型。 从那里开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM