2010-05-11 23 views
7

Dada this artículo de MSDN, nos enseña que el Sistema de tipos común en .Net tiene esta clasificación de los tipos de referencia :¿Qué significa exactamente un tipo de autodescripción en .Net?

"Tipos de referencia puede ser tipos de auto-describen, tipos de puntero, o tipos de interfaz. El tipo de un tipo de referencia se puede determinar a partir de los valores de los tipos de autodescripción. Los tipos de autodescripción se dividen en matrices y clase ty pes. "

  1. lo tanto una matriz, por ejemplo, es un tipo de auto-descripción, ya que podemos determinar su tipo a partir de sus valores?
  2. ¿Cómo?
  3. ¿Eso es o hay más en esta definición?

Respuesta

3

Un tipo auto-descripción es del tipo que se describe mediante metadatos disponibles sobre sí mismo. La forma más común son los tipos de clase. No es muy fácil de demostrar lo que significa la auto-describen:

El tipo sí es descrito por la definición de clase. p.ej. Una clase de cliente con un nombre, edad y customerid. Los datos puros para una instancia de esta clase sería algo así como:

8%3|*1C U S T O M E R 

Sólo porque el medio ambiente tiene la descripción de la clase que contiene los metadatos que realmente sabe que algunos de estos datos constituye la identificación, la edad y el nombre. Y para identificar los metadatos, los datos del contenido del objeto se combinan con una identificación de clase para que el entorno pueda coincidir con la descripción de la clase con los metadatos.

|Class metadata reference: Metadata for the customer class 
| |Customer ID: Field 
| | |Customer Age: Field 
| | ||Customer Name : Field 
8%3|*1C U S T O M E R 

Para las matrices es similar: las clases de matrices contienen información sobre el número de entradas, así como información de tipo (véase anteriormente) sobre las entradas almacenadas.

3

Un tipo de autodescripción es un tipo de datos que proporcionan información sobre ellos para el beneficio del recolector de basura. Básicamente cualquier tipo que tenga alguna forma de metadatos, p. un conjunto, se consideraría un tipo de autodescripción.

3

Tal vez la mejor manera de mostrar cómo los tipos de puntero y los tipos de interfaz son no auto-descripción es con un ejemplo:

using System; 

interface ISample { } 
class CSample : ISample { } 

class Program { 
    static unsafe void Main(string[] args) { 
     ISample itf = new CSample(); 
     var it = itf.GetType(); 
     Console.WriteLine(it.FullName); 
     int value = 42; 
     int* p = &value; 
     var pt = p->GetType(); 
     Console.WriteLine(pt.FullName); 
     Console.ReadLine(); 
    } 
} 

Salida:

CSample 
System.Int32 

En otras palabras, los objetos declarados como un tipo de interfaz solo puede describir la clase que los implementa. Los punteros solo pueden describir el tipo de objeto al que apuntan.

Cuestiones relacionadas