gpt4 book ai didi

c# - C#中的默认参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:20 29 4
gpt4 key购买 nike

也许是一个老问题,但我在互联网上找不到任何全面的内容。

如果C#中默认的参数传递方式是By value ,那么它是如何影响初始引用类型变量的呢?

即在下面的示例中,如果它是按值传递参数,为什么它会打印“Hello World”而不仅仅是“Hello”?

void Foo (StringBuilder x)
{
x.Append (" World");
}

StringBuilder y = new StringBuilder();
y.Append ("Hello");
Foo (y);
Console.WriteLine (y);

最佳答案

首先,了解 C# 中有两种基本类型:值类型引用类型

此外,这些类型中的每一种都可以按值按引用传递给方法。 (所以,这意味着实际上有四种方式将参数传递给方法。)

无论您如何传递引用类型(按值或按引用),您都可以更改该引用指向的值!

现在,关于您的特定示例,您的问题参数属于 StringBuilder 类型,这是一种引用类型。 (StringBuilder 是一个,而类是引用类型。)同样,因为您将引用类型传递给您的方法,所以您可以更改与该类型关联的值该方法内部的引用。

最后,请注意您正在按值传递引用类型参数。相反,如果您要传递引用类型 By Reference,然后将其设置为 null,您实际上会破坏与引用关联的值。 (这与将参数变量设置为 null 方法之外 相同。)

您可以在这里找到更详尽和更易读的解释:C# Concepts: Value vs Reference Types

关于c# - C#中的默认参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8048953/

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