簡體   English   中英

為什么在我的屬性聲明“[field:NonSerialized]”中需要“field:”?

[英]Why do I need “field:” in my attribute declaration “[field:NonSerialized]”?

我在任何地方都找不到列為 C# 關鍵字的“字段”。 有誰知道這件事的背景?

這是必要的,例如,如果您將事件標記為不可序列化。 它指定屬性適用的目標。

它是屬性目標語法的一部分。 規范

attribute-target:
    field
    event
    method
    param
    property
    return
    type

另請參閱NonSerializedAttribute的文檔:

要將NonSerializedAttribute類應用於事件,請將屬性位置設置為 field,如以下 C# 代碼所示。

[field:NonSerializedAttribute()]

public event ChangedEventHandler Changed;

C# 編譯器通常可以輕松確定屬性適用於聲明的哪個部分。 我可以想到您可能會使用它的三種情況:

  1. 適用於程序集的屬性。 在 AssemblyInfo.cs 中非常明顯
  2. 應用於 P/Invoke 聲明的返回值的屬性,[return:MarshalAs]
  3. 將該屬性應用於沒有訪問器的屬性或事件的支持變量。 你的情況。

這是為了允許您在字段上設置 NonSerialized 屬性,這在序列化事件中很有用。

例如,這會給你一個編譯錯誤

[NonSerialized]
public event SomeEventHandler SomeEvent;

要解決此問題,您必須使用field:

[field:NonSerialized]
public event SomeEventHandler SomeEvent;

更多關於這里 -委托和序列化

NonSerializedAttribute 僅適用於字段,您可以按如下方式使用它:

[NonSerialized]
public string myString;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM