c#中的out参数

Sac*_*mar 10 c# out

我是C#的新手.我用C#中的参数尝试了这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class First
{
    public void fun(out int m)
    {
        m *= 10;
        Console.WriteLine("value of m = " + m);
    }
}

class Program
{
    static void Main(string[] args)
    {
        First f = new First();
        int x = 30;
        f.fun(out x);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一些错误,如" 使用未分配的参数'm'",并且
必须在控制离开当前方法之前指定out参数'm'.

那么这些错误的含义是什么呢?为什么在我已经为x赋值时必须分配' m ' .

Cha*_*ana 18

ref表示在调用方法之前传递对已声明和初始化的变量的引用,并且该方法可以修改该变量的值.

out表示在调用方法之前传递对已声明但尚未初始化的变量的引用,并且该方法必须在返回之前初始化或设置其值.

  • 我的坏,在这种情况下通过"引用",我的意思是变量*name*或token,它引用变量声明声明的内存位置.在这种情况下,我指的是值类型,而不是*reference*类型.如果它实际上是*reference*类型,那么变量本身(或者我应该说变量引用的内存)将不包含数据,它将包含存储数据的内存地址.在这种情况下,"ref"表示间接引用(地址)必须在传递之前初始化,*out*表示它将在函数中初始化. (2认同)

Mar*_*zek 5

您收到错误,因为作为参数发送到方法的变量out不必在方法调用之前初始化。以下是 100% 正确的代码:

class Program
{
    static void Main(string[] args)
    {
        First f = new First();
        int x;
        f.fun(out x);
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来你正在寻找ref而不是在out这里:

class First
{
    public void fun(ref int m)
    {
        m *= 10;
        Console.WriteLine("value of m = " + m);
    }
}

class Program
{
    static void Main(string[] args)
    {
        First f = new First();
        int x = 30;
        f.fun(ref x);
    }
}
Run Code Online (Sandbox Code Playgroud)