簡體   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