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

时间:2014-12-18 11:02:38

标签: c# .net pass-by-reference out ref

考虑以下示例,此处传递 int i 作为参考。

我的问题是,我可以将参考类型传递给 out 吗? like object(即) static void sum(out OutExample oe)

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();
   }
}   

现在下面的代码有一些错误,

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();
   }
   }   

终于得到了答案!

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();
}
} 

3 个答案:

答案 0 :(得分:1)

...是

static void Sum(out OutExample oe)
{
    oe = null;
    // or: oe = new OutExample();
}
class OutExample {}

答案 1 :(得分:1)

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

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();
   }
} 

答案 2 :(得分:1)

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