Miembros de tipos
Actualización: noviembre 2007
El motor en tiempo de ejecución permite definir los miembros de un tipo: eventos, campos, tipos anidados, métodos y propiedades. Cada miembro tiene una firma. En la tabla siguiente se describen los miembros de tipos utilizados en .NET Framework.
Miembro |
Descripción |
---|---|
Define un incidente al que se puede responder, así como métodos para suscribirse a un evento y anular la suscripción y para provocar el evento. Los eventos se usan con frecuencia para informar a otros tipos de cambios de estado. |
|
Campo |
Describe y contiene parte del estado del tipo. Los campos pueden ser de cualquier tipo que admita el motor en tiempo de ejecución. |
Define un tipo dentro del ámbito del tipo envolvente. |
|
Método |
Describe las operaciones que se pueden hacer en el tipo. La firma de un método especifica los tipos permitidos de todos sus argumentos y de su valor devuelto. Un constructor es una clase de método especial que crea nuevas instancias de un tipo. |
Identifica un valor o estado del tipo y define métodos para obtener o establecer el valor de la propiedad. Las propiedades pueden ser tipos primitivos, colecciones de tipos primitivos, tipos definidos por el usuario o colecciones de tipos definidos por el usuario. Las propiedades se usan a menudo para que la interfaz pública de un tipo se mantenga independiente de la representación real del tipo. |
Características de los miembros
El sistema de tipos común permite que los tipos tengan distintas características, pero no es necesario que los lenguajes admitan todas estas características. En la siguiente tabla se describen estas características de los miembros.
Característica |
Se puede aplicar a |
Descripción |
---|---|---|
abstract |
Métodos, propiedades y eventos |
El tipo no proporciona la implementación del método. Los tipos que heredan métodos abstractos y tipos que implementan interfaces con métodos abstractos deben proporcionar una implementación para el método. La única excepción es que el tipo derivado sea un tipo abstracto. Todos lo métodos abstractos son virtuales. |
private, family, assembly, family y assembly, family o assembly, o public |
All |
Define la accesibilidad del miembro:
|
final |
Métodos, propiedades y eventos |
El método virtual no puede ser reemplazado en un tipo derivado. |
initialize-only |
Campos |
El valor sólo se puede inicializar y no se puede escribir en él después de la inicialización. |
instance |
Campos, métodos, propiedades y eventos |
Si un miembro no está marcado como static (C# y C++), Shared (Visual Basic), virtual (C# y C++) u Overridable (Visual Basic), es un miembro de instancia (no hay palabra clave de la instancia). En la memoria habrá tantas copias de estos miembros como objetos que los utilicen. |
literal |
Campos |
El valor asignado al campo es un valor fijo, conocido en tiempo de compilación, de un tipo de valor integrado. Los campos literales, a veces, se conocen como constantes. |
newslot u override |
All |
Define cómo interactúa el miembro con los miembros heredados con la misma firma:
El valor predeterminado es newslot. |
static |
Campos, métodos, propiedades y eventos |
El miembro pertenece al tipo en que está definido, no a una instancia particular del tipo. El miembro existe incluso si no se ha creado ninguna instancia del tipo y lo comparten todas las instancias del tipo. |
virtual |
Métodos, propiedades y eventos |
Un tipo derivado puede implementar el método, que se puede invocar estática o dinámicamente. Si se utiliza la invocación dinámica, el tipo de la instancia que hace la llamada en tiempo de ejecución determina a qué implementación del método se llama, en lugar del tipo conocido en tiempo de compilación. Para invocar un método virtual de manera estática, es posible que haya que convertir la variable en un tipo que utilice la versión deseada del método. |
Sobrecarga
Cada miembro de tipo tiene una firma única. Las firmas de método están formadas por el nombre del método y una lista de parámetros (el orden y los tipos de los argumentos del método). Se pueden definir varios métodos con el mismo nombre dentro un tipo, siempre que las firmas sean distintas. Cuando se definen dos o más métodos con el mismo nombre se dice que el método está sobrecargado. Por ejemplo, en System.Char, IsDigit está sobrecargado. Un método toma un Char y devuelve un valor Boolean. El otro método toma una String y un Int32 y devuelve un valor Boolean. Las listas de parámetros también se pueden calificar con la restricción varargs, que indica que el método admite una lista de argumentos de variables.
Heredar, reemplazar y ocultar miembros
Un tipo derivado hereda todos los miembros de su tipo base, es decir, estos miembros se definen en el tipo derivado y están disponibles para él. El comportamiento o cualidades de los miembros heredados se puede modificar de dos maneras:
Un tipo derivado puede ocultar un miembro heredado definiendo un nuevo miembro con la misma firma. Esto puede hacerse para que un miembro que era anteriormente pública se haga privado o para definir nuevo comportamiento para un método heredado marcado como final.
Un tipo derivado puede reemplazar a un método virtual heredado. El método de reemplazo proporciona una nueva definición del método que se invocará según el tipo del valor en tiempo de ejecución y no el tipo de la variable conocido en tiempo de compilación. Un método puede reemplazar a un método virtual sólo si el método virtual no está marcado como final y el nuevo método es, al menos, tan accesible como el método virtual.