引用自动实现属性的支持字段

时间:2015-01-29 06:34:34

标签: c# properties reference backing-field

在C#中,自动实现的属性非常方便。但是,尽管它们除了封装它们的支持字段之外什么都不做,但它们仍然不能作为ref或out参数传递。例如:

public int[] arr { get; private set; } /* Our auto-implemented property */
/* ... */
public void method(int N) { /* A non-static method, can write to this.arr */
    System.Array.Resize<int>(ref this.arr, N); /* Doesn't work! */
}

在这种特殊情况下,我们可以解决这个问题:

public void method(int N) { /* A non-static method, can write to this.arr */
    int[] temp = this.arr;
    System.Array.Resize<int>(ref temp, N);
    this.arr = temp;
}

在C#中使用对自动实现属性的支持字段的引用是否有更优雅的方式?

2 个答案:

答案 0 :(得分:6)

  

是否有更优雅的方式来使用对支持字段的引用   C#中自动实现的属性?

据我所知,事实并非如此。属性是方法,这就是为什么当参数需要一种类型的支持字段时,你不能以这种方式传递它们。

如果您想使用自动属性,您所描述的解决方案是一种解决方案。否则,您必须自己定义一个支持字段,并让属性使用它。

注意:您可以通过反思获得自动属性的支持字段,但这是一个我不会使用的hacky解决方案。

答案 1 :(得分:3)

来自MSDN

  

您不能将ref和out关键字用于以下类型的方法:

     
      
  • 使用async修饰符定义的异步方法。
  •   
  • 迭代器方法,包括yield return或yield break语句。
  •   
  • 属性不是变量。它们是方法,不能传递给ref参数。
  •