关于c#:它是否可用于传递引用类型(即)对象?

Is it Out can be used for passing a reference type (i.e) Objects?

本问题已经有最佳答案,请猛点这里访问。

考虑下面的示例,这里传递int i作为引用。

我的问题是,是否可以将引用类型传递给out?like对象(即)静态void sum(out outexample oe)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class OutExample
{
   static void Sum(out int i)
   {
      i = 5;
   }
   static void Main(String[] args)
   {
     int val;
     Sum(out val);
     Console.WriteLine(val);
     Console.Read();
   }
}

下面的代码有一些错误,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class OutExample
{
  int a;
   static void Sum(out OutExample oe)
   {
    oe.a = 5;
   }
   static void Main(String[] args)
   {
    int b;
    OutExample oe1=new OutExample();
    Sum(out oe);
    oe.b=null;
    Console.WriteLine(oe.b);
    Console.Read();
   }
   }

终于得到答案了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class OutExample
{
int a;
int b;

static void Sum(out OutExample oe)
 {
   oe = new OutExample();
   oe.a = 5;
 }

static void Main(String[] args)
{
   OutExample oe = null;
   Sum(out oe);
   oe.b = 10;
   Console.WriteLine(oe.a);
   Console.WriteLine(oe.b);
   Console.Read();
}
}


我建议你重新考虑一下。引用类型是对存储位置的引用。在out中传递它,您将传递对此引用的引用。你为什么不直接路过ref


您必须在Sum方法中创建一个新的OutExample

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class OutExample
{
   int a;
   int b;

   static void Sum(out OutExample oe)
   {
       oe = new OutExample();
       oe.a = 5;
   }

   static void Main(String[] args)
   {
       OutExample oe = null;
       Sum(out oe);
       oe.b = 10;
       Console.WriteLine(oe.a);
       Console.WriteLine(oe.b);
       Console.Read();
   }
}


对。。。

1
2
3
4
5
6
static void Sum(out OutExample oe)
{
    oe = null;
    // or: oe = new OutExample();
}
class OutExample {}