繁体   English   中英

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

[英]Reference to the backing field of auto-implemented property

在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#中自动实现属性的支持字段的引用?

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

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

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

注意:您可以通过反射获得auto-property的支持字段,但这是一个我不会使用的hacky解决方案。

来自MSDN

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM