我有一个类,我在其中声明一个对象,但不初始化该对象。然后我将对象传递给另一个类中的方法进行初始化。我期望发生的是调用类中的对象现在将引用已初始化的对象,但它是空的。
这是我的意思的一个例子:
class MainClass
{
ObjectA foo;
OtherClass.InitializeObjectA(foo);
// why is foo null over here?
}
class OtherClass
{
public static void InitializeObjectA(ObjectA device)
{
device = new ObjectA();
}
}
我的问题是,当我在调用 InitializeObjectA()
后尝试使用 foo 时,设备仍然指向 null!如果我将 InitializeObjectA()
更改为 out ObjectA device
它会起作用。谁能解释为什么需要这样做?
最佳答案
如果你想让它工作,你需要通过引用传递:
public static void InitializeObjectA(ref ObjectA device)
{
或者:
public static void InitializeObjectA(out ObjectA device)
{
否则,InitializeObjectA
会将 device
参数设置为 new ObjectA()
,但这不会影响调用方,因为,默认情况下,引用按值传递。
请注意,如果您只是尝试初始化,则返回一个实例而不是 void 通常是处理此问题的更好方法:
public static ObjectA InitializeObjectA()
{
return new ObjectA();
}
这避免了使用 ref
或 out
传递的需要。
关于c# - 在其他类的方法中初始化的对象未被 C# 中的调用方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519478/