属性宣言「[field:NonSerialized]」に「field:」が必要なのはなぜですか?
-
19-09-2019 - |
質問
C# キーワードとしてリストされている「フィールド」がどこにも見つかりません。この背景を知っている人はいますか?
解決
C# コンパイラは通常、属性が宣言のどの部分に適用されるかを問題なく把握できます。これを使用するケースとしては、次の 3 つが考えられます。
- アセンブリに適用される属性。AssemblyInfo.cs で非常に目立つ
- P/Invoke 宣言の戻り値に適用される属性 [return:MarshalAs]
- アクセサーを使用せずに、プロパティまたはイベントのバッキング変数に属性を適用します。あなたの場合。
他のヒント
あなたは非直列化可能としてイベントをマークしている場合は、
これは、例えば、必要です。これは、属性が適用される対象を指定します。
これは、属性ターゲットの構文の一部です。 仕様でます:
attribute-target:
field
event
method
param
property
return
type
NonSerializedAttribute
のも、マニュアルを参照してください>
、イベントに
NonSerializedAttribute
クラスを適用するには、次のC#コードに示すように、フィールドに属性の位置を設定します。
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
これはあなたがフィールド上NonSerialized属性を設定できるようにするために意図され、このイベントをシリアル化に有用である。
たとえば、これはあなたのコンパイルエラーを与えるだろう。
[NonSerialized]
public event SomeEventHandler SomeEvent;
あなたはfield:
を使用する必要があり、この問題を解決するには、
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
ここでは、この上のほかの - 代表とシリアライズする
NonSerializedAttributeは、次のようにあなたがそれを使用することができ、フィールドにのみ適用されます:
[NonSerialized]
public string myString;
所属していません StackOverflow