no puedo encontrar "campo" aparece como C# palabra clave en cualquier lugar. ¿Alguien sabe los antecedentes sobre esto?¿Por qué necesito "campo:" en mi declaración de atributo "[field: NonSerialized]"?
Respuesta
El compilador de C# generalmente no tiene problemas para averiguar a qué parte de una declaración se aplica el atributo. Puedo pensar en tres casos donde puede usarlo:
- Atributos que se aplican al ensamblaje. Muy visible en AssemblyInfo.cs
- Un atributo aplicado al valor de retorno de una declaración P/Invocar, [return: MarshalAs]
- Tener el atributo aplicado a la variable de respaldo de una propiedad o evento sin descriptores de acceso. Tu caso.
El NonSerializedAttribute sólo es aplicable a los campos, se puede utilizar de la siguiente manera:
[NonSerialized]
public string myString;
y propiedades ... –
No solo campos. –
Estoy parado corregido. –
Esto es necesario, por ejemplo, si se está marcando un evento como no serializable. Especifica el objetivo al que se aplica el atributo.
Es parte de la sintaxis de atributo target. Desde el specification:
attribute-target:
field
event
method
param
property
return
type
Véase también la documentación para 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;
bien no se puede serializar un evento, y la NonSerializedAttribute sólo es aplicable a los campos, por lo que no entiende lo que [field: NonSerializedAttribute()] lo hace, también estoy sorprendido que compila. –
El punto es que los objetos que se suscriben al evento serán consideradas como parte del gráfico de objetos y serializado cuando se serializa el objeto que contiene el evento. Para evitar que se serialicen, debe atribuir el evento con 'NonSerializedAttribute'.Pero como 'NonSerializedAttribute' solo se aplica a los campos, debe marcarlo con el atributo' target 'field'. – jason
Yuriy, creo que los delegados se compilan en clases, en cuyo caso cuando se serializan se serializan con su lista de invocación. En este caso, debe configurarlo como [NonSerialized] pero arroja un error de compilación, por lo que debe especificar el campo: NonSerialized. Creo que lo arreglaron en .NET 3.5, sin embargo, –
Esto se hace para que pueda configurar NonSerialized atributo en los campos, esto es útil en la serialización de eventos.
Por ejemplo esto le dará 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 sobre esto aquí - Delegates and Serialization
Pero lo está marcando como NonSerialized, y los eventos no se pueden serializar. –
Yuriy, creo en .NET 3.0 eventos/delegados fueron serializables como clases, por lo que tuvo que especificarlos como NonSerialized –
Yuriy, consulte el siguiente enlace http://msdn.microsoft.com/en-us/ magazine/cc163902.aspx # S1 –
- 1. NonSerialized en la propiedad
- 2. ¿por qué necesito terminar mi ob_start()?
- 3. ¿Por qué mi declaración LINQ devuelve IEnumerable?
- 4. ¿Por qué [NonSerialized] no funciona en las propiedades autoaplicadas?
- 5. ¿Por qué necesito usar break?
- 6. Diferencia entre NonSerialized y Xml.Serialization.XmlIgnore?
- 7. ¿Qué sucede en esta mi declaración?
- 8. ¿Por qué necesito la interfaz?
- 9. Necesito una declaración anticipada en Ruby
- 10. ¿Por qué necesito std :: get_temporary_buffer?
- 11. ¿Por qué mvc Html.HiddenFor no representa mi campo?
- 12. Gender Field en java
- 13. PDF Form Field Manipulation
- 14. ¿Por qué mi atributo de datos centrales transformable no utiliza mi NSValueTransformer personalizado?
- 15. Jquery Hidden Field
- 16. ¿Por qué necesito doble capa de indirección para macros? En
- 17. atributo dependiente de otro campo
- 18. crystal report field explorer no muestra el campo recién agregado
- 19. ¿Qué necesito para ejecutar un script node.js en mi servidor?
- 20. ¿Por qué y cuándo necesito Azure?
- 21. Spring roo, field enum
- 22. ¿Por qué necesito el conjunto DJANGO_SETTINGS_MODULE?
- 23. Cuándo usar $ HTTP_POST_VARS ['field'] y $ _POST ['field']?
- 24. ¿Por qué necesito usar un marco popular?
- 25. Ruby on Rails field average?
- 26. ¿Por qué/cuándo necesito un objetivo "limpio"?
- 27. Consulta en Mongoid Hash Field
- 28. oracle datetime field indexing
- 29. SQLAlchemy ORDER BY FIELD()
- 30. ¿Por qué necesito enjuagar mi flujo de E/S para obtener el resultado correcto?
Se puede publicar un poco más de código? ¿Dónde intentas crear un nuevo atributo o estás aplicando el atributo en alguna parte? Más contexto ayudaría. – Nick
Me olvidé de esos. He actualizado mi lista de palabras clave de C# para incluirlas. ¡Gracias! Consulte http://blogs.msdn.com/ericlippert/archive/2009/05/11/reserved-and-contextual-keywords.aspx para obtener más información. –