如果我有一些接受布尔值的方法,并且我传递了一个布尔属性,那么该方法是否会引用该属性?或者只是我当时传递的价值?
答案 0 :(得分:1)
您需要使用ref
关键字在C#中通过引用传递。在C#中,传递值是默认值。传递非不可变类实例时,这有点令人困惑,因为您传递的是引用的值。当您将类引用传递给方法而不使用 ref
关键字时,该方法可以更改实例的属性,但它们无法更改调用方的引用到那个实例。他们无法更改调用者的引用以引用新实例。但是使用ref
(或out
),他们可以。
C#中的ref
关键字不能与属性一起使用。 See fiddle for the code below:
编译错误(第8行,第15行):属性,索引器或动态成员访问权限不能作为out或ref参数传递
C#
using System;
public class Program
{
public static void Main()
{
var c = new C();
F(ref c.P);
}
public static void F(ref int n) { }
public class C
{
public int P { get; set; }
}
}
这是因为ref int
是对int的引用,而具有getter和setter的属性不是整数。它的代码返回一个整数,或者可以为其分配一个整数。 C#做了一些魔法,但没有多少魔法。而“魔术”只是编译器生成的代码。他们可以做到了。但他们没有。
我想猜测为了运行时效率,他们希望将它作为简单的语法糖保存在指针(或任何与它非常相似的东西)上。但这种猜测可能是错误的。
答案 1 :(得分:0)
您当时传递的值
答案 2 :(得分:0)
它将传递价值。
默认情况下,C#中的所有参数都会复制该值。例外情况是使用out
或ref
注释属性时,在这种情况下,参数实际上是对值的引用,而不是值本身。
虽然通常可以通过引用方法传递参数,但是不能通过引用传递属性的值,它在C#中是不受支持的。如果的方法使用ref
进行注释,那么您的代码将无法编译。