¿Por qué necesito “campo:” en mi declaración de atributo “[field: NonSerialized]”?
-
19-09-2019 - |
Pregunta
No puedo encontrar "campo" que aparece como C # palabra clave en cualquier lugar. ¿Alguien sabe el fondo en esta?
Solución
El compilador de C # por lo general no tiene problemas para averiguar qué parte de una declaración del atributo se aplica a. Se me ocurren tres casos en los que es posible utilizarlo:
- Los atributos que se aplican a la asamblea. Muy visible en AssemblyInfo.cs
- Un atributo aplicado al valor de retorno de una declaración P / Invoke, [retorno: MarshalAs]
- Tener el atributo se aplica a la variable respaldo de una propiedad o un evento sin descriptores de acceso. Su caso.
Otros consejos
Esto es necesario, por ejemplo, si se está marcando un evento como no serializable. En él se especifica el objetivo de que el atributo se aplica a.
Es parte de la sintaxis objetivo atributo. Desde el :
attribute-target:
field
event
method
param
property
return
type
Véase también la documentación de NonSerializedAttribute
:
Para aplicar la clase
NonSerializedAttribute
a un evento, establecer la ubicación de atributo para el campo, como se muestra en el siguiente código C #.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Esto es para que pueda configurar atributo NonSerialized en los campos, esto es útil en la serialización de los acontecimientos.
Por ejemplo esto le daría un error de compilación
[NonSerialized]
public event SomeEventHandler SomeEvent;
Para solucionar este problema, tiene que usar field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
Más información sobre este aquí - Delegados y serialización
El NonSerializedAttribute sólo es aplicable a los campos, se puede usar de la siguiente manera:
[NonSerialized]
public string myString;