c# - 在其他类的方法中初始化的对象未被 C# 中的调用方法引用

标签 c# objectinstantiation

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

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

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

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

关于c# - 在其他类的方法中初始化的对象未被 C# 中的调用方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18519478/

相关文章:

c# - 使用 ExceptionHandler PipeLine 时,ASP.NET Core 返回 404 而不是 500

c# - 在不知道数组大小的情况下从 C 到 C# P/Invoke

c# - 如何在 C# 控制台应用程序、.NET 4.5 中实现并发调用?

c++ - 单行类声明和实例化

angularjs - 如何动态实例化服务?

java - 是否有一种更简洁的方法来实例化 5 个对象 A、3 个对象 B、1 个对象 C、1 个对象 D,所有这些都在一个方法中?

C# 列出 amazon S3 文件夹下所有具有文件名的文件

c# - 在房间图片中选择一个区域,可以是墙壁、屋顶或地板,然后应用纯色或纹理

python - 如何创建一个不可实例化的类?

python - 动态实例化对象