Definiciones de tipos
Los tipos nuevos se definen a partir de tipos existentes. Los tipos de valor, punteros, matrices y delegados integrados se definen cuando se utilizan y se conocen como tipos implícitos. Los tipos pueden estar anidados, es decir, un tipo puede ser miembro de otro.
Una definición de tipo contiene:
Los atributos definidos en el tipo.
La visibilidad del tipo.
El nombre del tipo.
El tipo base del tipo.
Las interfaces que implementa el tipo.
Las definiciones de todos los miembros del tipo
Atributos
Los atributos proporcionan metadatos adicionales definidos por el usuario . Los atributos se pueden aplicar prácticamente a todos los elementos del lenguaje: tipos, propiedades, métodos, etc.
Accesibilidad a tipos
Todos los tipos tienen un modificador de accesibilidad que rige su accesibilidad desde otros tipos. En la tabla siguiente se describen las accesibilidades a tipos que admite el motor en tiempo de ejecución.
Accesibilidad | Descripción |
---|---|
public |
Todos los ensamblados pueden tener acceso al tipo. |
assembly |
El tipo sólo está accesible desde dentro del ensamblado. |
La accesibilidad de un tipo anidado depende de su dominio de accesibilidad, que viene determinado por la accesibilidad declarada del miembro y el dominio de accesibilidad del tipo contenedor inmediato. Sin embargo, el dominio de accesibilidad de un tipo anidado no puede exceder al del tipo contenedor.
El dominio de accesibilidad del miembro anidado M declarado en el tipo T en el programa P se define de la siguiente manera (teniendo en cuenta que M puede ser un tipo en sí mismo):
Si la accesibilidad declarada de M es public, el dominio de accesibilidad de M es el dominio de accesibilidad de T.
Si la accesibilidad declarada de M es protected internal, el dominio de accesibilidad de M es la intersección del dominio de accesibilidad de T con el texto de programa de P y el texto de programa de cualquier tipo derivado de T declarado fuera de P.
Si la accesibilidad declarada de M es protected, el dominio de accesibilidad de M es la intersección del dominio de accesibilidad de T con el texto de programa de T y el de cualquier tipo derivado de T.
Si la accesibilidad declarada de M es internal, el dominio de accesibilidad de M es la intersección del dominio de accesibilidad de T con el texto de programa de P.
Si la accesibilidad declarada de M es private, el dominio de accesibilidad de M es el texto de programa de T.
Nombres de tipo
El sistema de tipos común sólo impone dos restricciones en los nombres:
Todos los nombres se codifican como cadenas de caracteres Unicode (de 16 bits).
Los nombres no pueden tener un valor incrustado (de 16 bits) de 0x0000.
Todas las comparaciones se hacen byte a byte y, por lo tanto, distinguen entre mayúsculas y minúsculas y son independientes de la configuración regional.
Aunque un tipo puede hacer referencia a tipos de otros módulos y ensamblados, un tipo se define completamente dentro de un módulo. Los nombres de tipo sólo tienen que ser únicos en un ensamblado. Para identificar un tipo por completo, el nombre del tipo debe estar calificado por el ensamblado que contiene la implementación del tipo. Para obtener más información, vea Especificar nombres de tipo completos.
Tipos base e interfaces
Un tipo puede heredar valores y comportamientos de otro. El sistema de tipos común no permite que los tipos hereden de más de un tipo base.
Un tipo puede implementar cualquier número de interfaces. Para implementar una interfaz, un tipo debe implementar todos los miembros virtuales de la interfaz. Un tipo derivado puede implementar un método virtual, que se puede invocar estática o dinámicamente. Para obtener más información sobre los miembros virtuales, vea Miembros de tipos. Para obtener más información sobre la herencia y las interfaces, vea Clases e Interfaces.
Miembros de tipos
Los miembros de un tipo (eventos, campos, tipos anidados, métodos y propiedades) definen su comportamiento y estado. Para obtener más información, vea Miembros de tipos.
Vea también
Conceptos
Otros recursos
Sistema de tipos comunes
Ensamblados en Common Language Runtime
Extender metadatos mediante atributos