C# 为什么这段代码的结果是相同的?

C# 为什么这段代码的结果是相同的?,c#,C#,嗨,我想知道为什么这个代码的结果是30和30,没有任何变化?谢谢 因为int是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对increment方法中num参数的任何修改都不会影响调用代码中x的值。在increment方法中只修改x值的副本 static void increment(int num) { num++; } static void Main(string[] args) { int x = 30; Console.Writ

嗨,我想知道为什么这个代码的结果是3030,没有任何变化?谢谢

因为
int
是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对
increment
方法中
num
参数的任何修改都不会影响调用代码中
x
的值。在
increment
方法中只修改
x
值的副本

static void increment(int num)
{
    num++;
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x);
    Console.WriteLine(x);
}

因为
int
是一个。它不是通过引用传递的。它通过值传递(复制创建并传递到方法)。因此,对
increment
方法中
num
参数的任何修改都不会影响调用代码中
x
的值。在
increment
方法中只修改
x
值的副本

static void increment(int num)
{
    num++;
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x);
    Console.WriteLine(x);
}

原因是传递的是int的值,而不是引用


如果您将increment更改为accept(ref int)并调用它-
increment(ref x)
它将更改它

,原因是传递的是int的值,而不是引用


如果您将increment更改为accept(ref int)并调用它-
increment(ref x)
它将更改它

您的increment方法实际上什么都不做。它不会返回修改后的值。
num++
行将按1递增
num
,但您不会从中返回任何内容。因此
num
将始终保持不变。例如,您可以使用
ref
关键字通过ref

static void increment(int num) // here you have copy of x
{
    num++; // copy is modified
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x); // x stays here and not passed into method
    Console.WriteLine(x);
}

这将改变第二次writeline调用时num给您的值
31

您的增量方法实际上什么都不做。它不会返回修改后的值。
num++
行将按1递增
num
,但您不会从中返回任何内容。因此
num
将始终保持不变。例如,您可以使用
ref
关键字通过ref

static void increment(int num) // here you have copy of x
{
    num++; // copy is modified
}

static void Main(string[] args)
{   
    int x = 30;
    Console.WriteLine(x);
    increment(x); // x stays here and not passed into method
    Console.WriteLine(x);
}

这将更改第二次writeline调用时提供给您的num的值
31

原因是您通过值而不是引用传递num变量。按值传递时,将变量的值复制到本地副本中,然后本地副本递增,但在方法完成后销毁。如果通过引用传递变量,则变量的地址将传递给方法,并且原始变量将更改,而不是其副本

static void increment (ref int num)
{
    num++;
}
然后用

static void increment (ref int num)
    {
        num++;
    }

int
是值类型,与所有其他值类型一样,如果未使用关键字
ref
,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。

原因是您通过值而不是引用传递num变量。按值传递时,将变量的值复制到本地副本中,然后本地副本递增,但在方法完成后销毁。如果通过引用传递变量,则变量的地址将传递给方法,并且原始变量将更改,而不是其副本

static void increment (ref int num)
{
    num++;
}
然后用

static void increment (ref int num)
    {
        num++;
    }
int
是值类型,与所有其他值类型一样,如果未使用关键字
ref
,则总是通过值传递。与这些不同,类类型作为引用传递,在方法中更改它们会更改原始对象。

x是本地定义的

如果您尝试打印
Console.WriteLine(num)增量(整数)

它将打印31。

x是本地定义的

如果您尝试打印
Console.WriteLine(num)增量(整数)


它将打印31。

因为在函数增量中,参数是通过值传递的,而不是通过引用传递的

如果您想看到x发生变化,也可以这样做

increment(ref x);


因为在函数增量中,参数是通过值传递的,而不是通过引用传递的

如果您想看到x发生变化,也可以这样做

increment(ref x);


int是一种值类型,您需要将参数声明为ref:

static void increment (ref int num)//num is passed by ref now
    {
        num++;
    }
        static void Main (string[] args)
    {   
        int x=30;

        Console.WriteLine(x);
        increment(ref x);
        Console.WriteLine(x);
    }

int是一种值类型,您需要将参数声明为ref:

static void increment (ref int num)//num is passed by ref now
    {
        num++;
    }
        static void Main (string[] args)
    {   
        int x=30;

        Console.WriteLine(x);
        increment(ref x);
        Console.WriteLine(x);
    }


请参考一个基本的方法外初始化教程虽然我失去了很多声誉,仍然很高兴得到答案@自由职业者:w3schools不仅是一个绝对糟糕的网站,它与C#无关。请参考方法之外的基本教程。虽然我失去了很多声誉,但仍然很高兴得到答案@自由撰稿人:w3schools不仅是一个绝对糟糕的网站,它与C#无关。谢谢!虽然我失去了很多声誉,但还是很高兴得到答案!谢谢虽然我失去了很多声誉,但还是很高兴得到答案!谢谢虽然我失去了很多声誉,但还是很高兴得到答案!希望你的感谢能让你得到一些回报:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案!希望你的感谢能让你得到一些回报:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案@user2049259一票否决票并不是什么好名声:)谢谢!虽然我失去了很多声誉,但还是很高兴得到答案@user2049259一次否决票并不是什么好名声:)