[英]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的索引。
现在,您要将盒子的内容(数据)之一传递给您的朋友。 您可以通过以下两种方式之一进行操作。
通过价值传递您的朋友选中您的盒子,然后将其复制到他的盒子/硬盘中。 假设您的朋友需要更改此数据。 如果这样,您的原始框将不会受到影响,因为他更改了框中的数据。
通过引用传递您只需将盒子的地址提供给您的朋友,您的朋友将使用您的盒子而不是复制它。 如果他修改了数据,它将在您的框中,您的原始数据将被更改。
在了解返回类型之前,您必须了解数据类型。 从那里开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.