C# 带有引用类型参数的ref关键字

C# 带有引用类型参数的ref关键字,c#,coding-style,C#,Coding Style,我认为更清楚的是,如果我将引用类型参数传递给该方法,该参数将在方法内部更改为add 像这样的ref关键字 void Foo(ref Boo boo) { boo.Value = 6; } ,即使这样也不会以任何方式影响程序执行,默认情况下,对象是通过引用传递的,我不想更改 在void中的引用如下: void Foo(ref Boo boo) { boo = new Boo(); } 因为我认为有了ref,从方法签名可以清楚地看出,我将在内部更改Boo,而不仅仅是读取它。 你同

我认为更清楚的是,如果我将引用类型参数传递给该方法,该参数将在方法内部更改为add 像这样的ref关键字

void Foo(ref Boo boo)
{
    boo.Value = 6;
}
,即使这样也不会以任何方式影响程序执行,默认情况下,对象是通过引用传递的,我不想更改 在void中的引用如下:

void Foo(ref Boo boo)
{
    boo = new Boo();
}
因为我认为有了ref,从方法签名可以清楚地看出,我将在内部更改Boo,而不仅仅是读取它。 你同意吗?你觉得这个怎么样

我认为更清楚的是,如果我将引用类型参数传递给该方法,该参数将在方法内部更改,以添加如下所示的ref关键字

void Foo(ref Boo boo)
{
    boo.Value = 6;
}
不,这只是表明您不熟悉
ref
的预期含义。方法操作提供给它们的对象是完全正常和惯用的。如果您不想这样做:写不可变对象

不要这样做。缺少
ref
并不意味着任何类型的
const

我认为更清楚的是,如果我将引用类型参数传递给该方法,该参数将在方法内部更改,以添加如下所示的ref关键字

void Foo(ref Boo boo)
{
    boo.Value = 6;
}
不,这只是表明您不熟悉
ref
的预期含义。方法操作提供给它们的对象是完全正常和惯用的。如果您不想这样做:写不可变对象


不要这样做。缺少
ref
并不意味着任何类型的
const

ref必须显式地用于Foo调用,比如
Foo(ref boo)
,因此是的,这已经很明显地表明对象将在函数中发生更改。您需要征求意见,因此问题应该结束。然而,不,你认为这更清楚,但对我来说恰恰相反,我不认为使用ref关键字真的会增加任何价值。如果我们传入一个可变引用类型,可以安全地假定它可能发生了变异。@JameyD实际上,这并不意味着“对象将被更改”。这意味着参数值通过引用传递,因此参数值可以更改。参数值不是对象,也永远不是对象。参数值是对对象的引用
ref
,在引用类型的上下文中,只是说:如果调用者将参数值重新分配给不同的引用:调用者将看到必须在Foo调用上显式使用changeref,如
Foo(ref boo)
,所以是,这已经很明显,对象将在函数中发生更改。您需要征求意见,因此问题应该结束。然而,不,你认为这更清楚,但对我来说恰恰相反,我不认为使用ref关键字真的会增加任何价值。如果我们传入一个可变引用类型,可以安全地假定它可能发生了变异。@JameyD实际上,这并不意味着“对象将被更改”。这意味着参数值通过引用传递,因此参数值可以更改。参数值不是对象,也永远不是对象。参数值是对对象的引用
ref
,在引用类型的上下文中,只是说:如果调用者将参数值重新分配给另一个引用:调用者将看到这种变化除了使对象不可变之外,不能在C#中强制实现纯度这一事实并不能使它成为“惯用”IMHO。从某种意义上讲,很多开发人员不将“查询”和“操作”方法分开是正常的,因此您通常无法通过查看其签名来判断方法的功能。不过,这并不意味着这是一件好事。在C#中,除了使对象不可变之外,不能强制实现纯洁性,这一事实并不能使它成为“惯用”语言。从某种意义上讲,很多开发人员不将“查询”和“操作”方法分开是正常的,因此您通常无法通过查看其签名来判断方法的功能。但这并不意味着这是件好事。