考虑以下示例,此处传递 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();
}
}
答案 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
?