在C#中调用方法不引用在其他类的方法中初始化的对象

w1r*_*res 3 c# objectinstantiation

我有一个类,我声明一个对象,但不初始化该对象.然后我将对象传递给另一个类中的方法进行初始化.我期望发生的是调用类中的对象现在将具有对初始化对象的引用,但它是null.

这是我的意思的一个例子:

class MainClass
{
    ObjectA foo;

    OtherClass.InitializeObjectA(foo);

    // why is foo null over here?
}

class OtherClass
{
    public static void InitializeObjectA(ObjectA device)
    {
        device = new ObjectA();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我在调用InitializeObjectA()它之后尝试使用foo时仍然指向null!如果我改变InitializeObjectA()out ObjectA device它的工作原理.任何人都可以解释为什么需要它?

Ree*_*sey 5

如果你想要这个,你需要通过引用传递:

public static void InitializeObjectA(ref ObjectA device)
{
Run Code Online (Sandbox Code Playgroud)

要么:

public static void InitializeObjectA(out ObjectA device)
{
Run Code Online (Sandbox Code Playgroud)

如果没有这个,InitializeObjectA请将device参数设置为a new ObjectA(),但这不会影响调用者,因为默认情况下,引用按值传递.

请注意,如果您只是尝试初始化,则返回实例而不是void通常是处理此问题的更好方法:

public static ObjectA InitializeObjectA()
{
     return new ObjectA();
}
Run Code Online (Sandbox Code Playgroud)

这避免了使用refout传递的需要.