当" out paramater"时,传递给被调用方法的值是多少?已通过

时间:2017-12-21 09:49:21

标签: c# .net parameters out

static void Main(string[] args)
{
    int i = 10;

    Program th = new Program();

    Thread t2 = new Thread(() => thread2(out i));
    t2.Start();
    Thread t1 = new Thread(() => thread1(i));
    t1.Start();
    Thread.Sleep(5000);

    Console.WriteLine("Main thread exits." + i);
    Console.ReadLine();
}

static void thread1(int i)
{
    Console.WriteLine(i);
    i = 100;
}

static void thread2(out int i) // what should be the value of i???
{
    Thread.Sleep(5000);
    i = 21;           
    Console.WriteLine(i);
}

当我们传递参数时,在被调用方法中收到的值应该是什么? "它是否为零或我们传递的值"

1 个答案:

答案 0 :(得分:0)

基于您的代码

static void Main(string[] args)
{
    int i = 10;

    Program th = new Program();

    Thread t2 = new Thread(() => thread2(out i));
    t2.Start();
    Thread t1 = new Thread(() => thread1(i));
    t1.Start();
    Thread.Sleep(5000);

    Console.WriteLine("Main thread exits." + i);
    Console.ReadLine();
}

第一个函数thread2将接收值i = 10。但是

在第二个函数中,您将收到i =10 or i =21,因为它全部取决于在CLR / CPU级别执行的执行。

我在这里要说的是,如果你thread2()方法执行在执行thread1()之前完成,那么thread1()将会收到21。但如果没有完成执行,则接收10作为输入。

如果您从Thread.Sleep(5000);函数中删除此行thread2(),则上述情况属实。

但是如果在理想情况下你不会将10传递给函数和主线程打印10,但这也取决于上下文切换...你的输出在这里没有修复。这一切都在处理和执行上。