我对c#局部变量的这个例子有一些问题

本文关键字:问题 局部变量 我对 | 更新日期: 2023-09-27 18:19:05

在这里我理解了局部变量的含义。但是我的第二个dvar是做什么的?method2不给我的SecondVar myValue吗?

这些代码意味着在method2中设置"某物"作为myVar到myValue,那么mySecondVar在这里的功能是什么?

private void method1()
{
    // This is a local variable called myVar
    string myVar = "something";
    string mySecondVar = method2(myVar);
}
private string method2(string myValue)
{
    // This method has received myVar from method1 as "myValue"
    return myValue;
}

我对c#局部变量的这个例子有一些问题

都是局部变量。根据您的代码,两者将具有相同的值。mySecondVar间接得到myVar的值

string mySecondVar = method2(myVar);

这行代码调用method2,传递myVar,并将方法调用的返回值赋给mySecondVar。通常,method2会在返回值之前对它做一些事情。在这个例子中,它什么也不做,所以你最终会把"something"赋给mySecondVar。

method2所做的唯一的事情是接受字符串值"something",在你的情况下,并返回相同的值"something"回mysecondvar。它严格地接受字符串并返回相同的字符串

它们都是局部变量,因为它们是在同一作用域中声明的。

string myVar = "something";

这里,你直接将myVar初始化为某个值。

string mySecondVar = method2(myVar);

在这里,您将method2()返回的值赋给mySecondVarmethod2()返回myVar的值,没有任何操作,因此mySecondVar也被初始化为与myVar相同的值。

这只是为了说明函数将返回它应该返回的类型的值。
在这种情况下,函数method2是一个字符串类型,它返回它接收到的值作为参数。

正如其他人所说,它们都是局部变量,这个例子说明了方法如何获取和返回值。

这里发生的最有趣的部分是c#中的字符串不是原语,所以你声明的局部变量实际上是对对象的引用,而不是对象数据本身。因此,在这段代码中,您实际上设置了两个局部变量来引用同一对象,而不是同一对象的两个不同副本。

局部变量是在这个方法的堆栈帧中分配的(因此,为什么它们是这个方法的"局部"),而对象通常是在堆上分配的。

这在本例中并不重要,因为字符串是不可变的,所以这两个引用都不能在另一个引用不知道的情况下编辑对象。但想想还是不错的!