gpt4 book ai didi

c# - 我可以在 C# 中通过引用传递原始类型吗?

转载 作者:可可西里 更新时间:2023-11-01 07:49:02 26 4
gpt4 key购买 nike

我知道在 C# 中,复杂类型是通过引用传递的,而基本类型是通过值传递的。我可以在 C# 中通过引用传递基本类型吗?

更新:

感谢您的回答,但我的例子是?

void test(object x) {

}

long y = 1;

test(ref y);

这会引发此异常:“ref”参数类型与参数类型不匹配

最佳答案

这里有几个不同的问题。

Can I pass primitive types by reference in C#?

首先,让我们确保这里的行话是正确的。目前还不清楚你所说的“原始类型”是什么意思。你的意思是像 int 或 long 这样的“内置到运行时”类型吗?您指的是任何值类型,无论是内置的还是用户定义的?

我假设你的问题实际上是

Can I pass value types by reference in C#?

值类型之所以称为值类型,是因为它们是按值传递的。引用类型之所以称为引用类型,是因为它们是通过引用传递的。因此,根据定义,答案似乎是“不”。

然而,事情并没有那么简单。

首先,您可以通过装箱将值类型的实例转换为引用类型的实例:

decimal d = 123.4m; // 128 bit immutable decimal structure
object o1 = d; // 32/64 bit reference to 128 bit decimal
object o2 = o1; // refers to the same decimal
M(o2); // passes a reference to the decimal.
o2 = 456.78m; // does NOT change d or o1

其次,您可以通过创建数组将值类型的实例转换为引用:

decimal[] ds1 = new decimal[1] { 123.4m }; 
decimal[] ds2 = ds1;
ds2[0] = 456.7m; // does change ds1[0]; ds1 and ds2 refer to the same array

第三,您可以使用“ref”关键字传递对变量(不是值 -- 变量)的引用:

decimal d = 123.4m;
M(ref d);
...
void M(ref decimal x)
{ // x and d refer to the same variable now; a change to one changes the other

Attempting to pass a ref long to a method that takes a ref object causes a compilation error: The 'ref' argument type doesn´t match parameter type

正确。两边变量的类型必须完全匹配。有关详细信息,请参阅此问题:

Why doesn't 'ref' and 'out' support polymorphism?

关于c# - 我可以在 C# 中通过引用传递原始类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122139/

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