2010-05-11 24 views
7

Với this bài viết MSDN, chúng ta biết rằng các Common Loại Hệ thống trong Net có phân loại này của loại tài liệu tham khảo:Loại tự mô tả chính xác trong .Net có nghĩa là gì?

"kiểu tham chiếu có thể tự mô tả loại, loại con trỏ, hoặc loại giao diện. Loại loại tham chiếu có thể được xác định từ các giá trị của các loại tự mô tả. Các loại tự mô tả được chia thành mảnglớp ty pes. "

  1. Vì vậy, một mảng, là loại tự mô tả vì chúng tôi có thể xác định loại của nó từ giá trị của nó?
  2. Làm cách nào?
  3. Có phải đó là hoặc có nhiều hơn với định nghĩa này không?

Trả lời

3

Loại tự mô tả là loại được mô tả bởi siêu dữ liệu có sẵn về chính nó. Dạng phổ biến nhất là các loại lớp. Có khá dễ dàng để hiển thị phương tiện tự mô tả:

Loại chính nó được mô tả bằng định nghĩa lớp. ví dụ. Lớp khách hàng có tên, tuổi và khách hàng. Dữ liệu thuần túy cho một phiên bản của lớp này sẽ có dạng như sau:

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

Chỉ vì môi trường có mô tả lớp chứa siêu dữ liệu bạn thực sự biết một số dữ liệu này tạo thành id, tuổi và tên. Và để xác định siêu dữ liệu, dữ liệu nội dung của đối tượng được hợp nhất với một id lớp để môi trường có thể khớp với mô tả lớp bằng siêu dữ liệu.

|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 

Đối với mảng tương tự: Các lớp mảng chứa thông tin về số lượng mục nhập cũng như thông tin loại (xem ở trên) về các mục được lưu trữ.

3

Loại tự mô tả là loại dữ liệu cung cấp thông tin về bản thân vì lợi ích của bộ thu gom rác. Về cơ bản, bất kỳ loại nào có một dạng Siêu dữ liệu, ví dụ: một hội đồng, sẽ được coi là một loại tự mô tả.

3

Có lẽ cách tốt nhất để hiển thị như thế nào loại con trỏ và các loại giao diện là không tự mô tả là một ví dụ:

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(); 
    } 
} 

Output:

CSample 
System.Int32 

Nói cách khác, các đối tượng công bố như một loại giao diện chỉ có thể mô tả lớp thực hiện chúng. Con trỏ chỉ có thể mô tả loại đối tượng mà chúng trỏ tới.

Các vấn đề liên quan