Atributos personalizados que generan marcas o opciones en la salida del lenguaje intermedio (IL)
Agregue estos atributos al código para que el compilador emita un modificador de lenguaje intermedio (IL) especificado. Estos atributos indican al compilador que incluya el modificador IL correspondiente en la salida.
Atributo | Modificador | Comentarios |
---|---|---|
System.Runtime.InteropServices.ComImportAttribute | import |
|
System.Runtime.InteropServices.DllImportAttribute | pinvokeimpl |
Puede agregar opciones enumeradas en el constructor. |
System.Runtime.InteropServices.FieldOffsetAttribute | .field |
Establece el desplazamiento de campo para la disposición de la memoria. |
MarshalAsAttribute | marshal |
Puede establecer opciones enumeradas en el constructor. |
System.Runtime.CompilerServices.MethodImplAttribute | flag |
Los argumentos del constructor especifican marcas con nombre específicas, como aggressiveinlining o forwardref . Estas marcas también especifican los modificadores native , managed o optil para el campo System.Runtime.CompilerServices.MethodCodeType. |
System.NonSerializedAttribute | notserialized |
|
System.Runtime.InteropServices.OptionalAttribute | [opt] |
|
System.Runtime.InteropServices.PreserveSigAttribute | preservesig |
|
System.SerializableAttribute | serializable |
|
System.Runtime.InteropServices.StructLayoutAttribute | auto , sequential o explicit |
Las opciones de diseño se pueden establecer mediante los parámetros . |
System.Runtime.CompilerServices.IndexerNameAttribute | Agregue este atributo a un indexador para establecer un nombre de método diferente. De forma predeterminada, los indexadores se compilan en una propiedad denominada Item . Puede especificar un nombre diferente mediante este atributo. |
Algunos de estos atributos personalizados se aplican mediante otra sintaxis de C# en lugar de agregar el atributo al código fuente.
Atributo | Comentarios |
---|---|
System.Runtime.InteropServices.DefaultParameterValueAttribute | Especifica el valor predeterminado para el parámetro . Use la sintaxis de parámetro predeterminada . |
System.Runtime.InteropServices.InAttribute | Especifica el modificador [in] IL. Use los modificadores in o ref readonly . |
System.Runtime.InteropServices.OutAttribute | Especifica el modificador [out] IL. Use el modificador out . |
System.Runtime.CompilerServices.SpecialNameAttribute | Especifica el modificador specialname IL. El compilador agrega automáticamente este modificador para los métodos que lo requieren. |
System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | Este atributo es necesario para la característica de delegate* . El compilador lo agrega a cualquier delegate* que requiera su uso. Sin embargo, debe agregar este atributo a cualquier declaración de método cuando ese método se asigna a un puntero de función. |
Por lo general, los atributos siguientes no se permiten en el origen de C#. Se enumeran aquí para ayudar a los autores de bibliotecas que utilizan la reflexión, y para asegurarse de que no se crean atributos personalizados con el mismo nombre completo.
Atributo | Comentarios |
---|---|
System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute | Impide que los compiladores de nivel inferior usen metadatos que no puedan comprender de forma segura. |
System.Runtime.CompilerServices.DecimalConstantAttribute | Codifica campos const decimal . El runtime no admite valores decimal como constantes. |
System.Reflection.DefaultMemberAttribute | Codifica los indexadores con System.Runtime.CompilerServices.IndexerNameAttribute. Este atributo indica el indexador predeterminado cuando su nombre es diferente de Item . Este atributo se permite en el origen. |
System.Runtime.CompilerServices.DynamicAttribute | Codifica si un tipo de una firma es dynamic (frente a object ). |
System.Runtime.CompilerServices.ExtensionAttribute | Este atributo señala los métodos de extensión. El compilador también coloca este atributo en las clases contenedoras. |
System.Runtime.CompilerServices.FixedBufferAttribute | Este atributo especifica los campos de la estructura fixed . |
System.Runtime.CompilerServices.IsByRefLikeAttribute | Este atributo especifica una estructura de ref . |
System.Runtime.CompilerServices.IsReadOnlyAttribute | Este atributo indica que un parámetro tiene el modificador in . Distingue parámetros in de readonly ref o [In] ref . |
System.Runtime.CompilerServices.RequiresLocationAttribute | Este atributo indica que un parámetro tiene el modificador readonly ref . Distingue readonly ref de in o [In] ref . |
System.Runtime.CompilerServices.IsUnmanagedAttribute | Este atributo especifica la restricción unmanaged en un parámetro de tipo. |
System.Runtime.CompilerServices.NullableAttribute, System.Runtime.CompilerServices.NullableContextAttribute, System.Runtime.CompilerServices.NullablePublicOnlyAttribute | Estos atributos codifican anotaciones anulables en su código fuente. |
System.ParamArrayAttribute | Este atributo codifica el modificador params en los parámetros de matriz. |
System.Runtime.CompilerServices.ParamCollectionAttribute | Este atributo codifica el modificador params en parámetros que no son de matriz. |
System.Runtime.CompilerServices.RefSafetyRulesAttribute | Este atributo especifica la versión de C# necesaria para comprender las anotaciones de seguridad ref en el ensamblado. Las reglas de seguridad ref evolucionan a medida que C# obtiene nuevas características. |
System.Runtime.CompilerServices.RequiredMemberAttribute | Este atributo indica que el modificador required se ha colocado en una declaración de miembro. Es la codificación de los miembros requeridos del lenguaje característico . |
System.Runtime.CompilerServices.TupleElementNamesAttribute | Este atributo codifica nombres de elementos de tupla utilizados en firmas. |
Además, el compilador puede generar una declaración para otros atributos usados internamente. El compilador genera estos atributos en el espacio de nombres System.Runtime.CompilerServices para su propio uso. Algunas no están en las bibliotecas en tiempo de ejecución de .NET. En su lugar, el compilador sintetiza una definición para una declaración de tipo internal
en cualquier ensamblado en el que se necesite el atributo.