gpt4 book ai didi

c# - 有 ref object par 和没有 ref object par 的两种方法有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 22:32:56 25 4
gpt4 key购买 nike

我想知道以下方法在如何引用对象参数方面有什么区别:

public void DoSomething(object parameter){}

public void DoSomething(ref object parameter){}

如果我想更改对 object 的引用而不是覆盖同一引用中的对象,我是否应该使用 ref object parameter

最佳答案

public void DoSomething(object parameter)
{
parameter = new Object(); // original object from the callee would be unaffected.
}

public void DoSomething(ref object parameter)
{
parameter = new Object(); // original object would be a new object
}

查看文章:Parameter Passing in C# by Jon Skeet

在C#中,引用类型对象的地址是按值传递的,当使用ref关键字时,可以为原始对象分配一个新对象或null,而不需要ref不可能的关键字。

考虑以下示例:

class Program
{
static void Main(string[] args)
{
Object obj1 = new object();
obj1 = "Something";

DoSomething(obj1);
Console.WriteLine(obj1);

DoSomethingCreateNew(ref obj1);
Console.WriteLine(obj1);

DoSomethingAssignNull(ref obj1);
Console.WriteLine(obj1 == null);
Console.ReadLine();
}
public static void DoSomething(object parameter)
{
parameter = new Object(); // original object from the callee would be unaffected.
}

public static void DoSomethingCreateNew(ref object parameter)
{
parameter = new Object(); // original object would be a new object
}

public static void DoSomethingAssignNull(ref object parameter)
{
parameter = null; // original object would be a null
}
}

输出将是:

Something
System.Object
True

关于c# - 有 ref object par 和没有 ref object par 的两种方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com