gpt4 book ai didi

c# - 使用引用值作为参数,带或不带 "ref"?

转载 作者:行者123 更新时间:2023-12-01 19:54:55 24 4
gpt4 key购买 nike

我遇到了两个解决方案(都有效):

 public List<Label> foo1(ref ISomeInterface[] all)

 public List<Label> foo2(ISomeInterface[] all)

有什么区别吗?我选择哪一个有关系吗?接口(interface)是一个引用值,无论如何都会将参数作为引用,“ref”也会获得引用...我想我可以忽略“ref”...我想知道为什么编译器不会给我一个错误...

最佳答案

Is there a diffrerence?

是的,有。 C# 中的所有内容都是按值传递的。当您通过 ref 传递引用类型时,您传递的是实际的引用指针而不是副本。这样,如果您通过 ref 传递引用类型并通过 new 关键字将其设置为新引用,您将更改该引用。

一个例子:

public static void Main(string[] args)
{
ISomeInterface[] somes = new[] { new SomeConcreteType() }
Foo(somes);
Console.WriteLine(somes.Length) // Will print 1
Foo(ref somes);
Console.WriteLine(somes.Length) // Will print 0
}

public List<Label> Foo(ref ISomeInterface[] all)
{
all = new ISomeInterface[0];
}
public List<Label> Foo(ISomeInterface[] all)
{
all = new ISomeInterface[0];
}

关于c# - 使用引用值作为参数,带或不带 "ref"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31914390/

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