Lớp Type

Trong .NET lớp Type dùng để biểu thị sự khai báo, định nghĩa của lớp, mảng, enum ... Từ các đối tượng triển khai, muốn lấy kiểu dữ liệu (Type) mà từ đó nó triển khai ra dùng phương thức object.GetType():

ob = new ...
Type type = ob.GetType();
Lớp Type với các phương thức, thuộc tính của nó, nó trở thành lớp cơ bản của kỹ thuật Reflection trong .Net, ví dụ một vài phương thức:
  • GetMethods() trả về tên các phương public
  • GetProperties() trả về tên các thuộc tính pulic của lớp
  • GetFields() lấy các trường public
  • GetEvents() lấy các sự kiện
  • GetProperty(String) lấy đối tượng PropertyInfo biểu thị thuộc tính với tên chỉ ra
  • ...

Ví dụ đọc thuộc của một lớp

GetProperty(String) ở trên trả về đối tượng lớp PropertyInfo, từ đối tượng này có thể đọc được giá trị của thuộc tính với phương thức GetValue( object obj, object[] index ), thiết lập giá trị cho một thuộc tính của đối tượng nào đó bằng SetValue(object, value)

public class A
{
    public int ID { get; set; }
    public string Name { get; set; }
}

class Program
{

    static void Main(string[] args)
    {
        A a = new A
        {
            Name = "HOTEN",
            ID = 10
        };

        //Đọc thuộc tính Name của a với Type
        object thuoctinhName = a.GetType().GetProperty("Name").GetValue(a, null);
        Console.WriteLine(thuoctinhName);
    }
}
Kết quả in ra là:
HOTEN

Bình thường thì giá trị thuộc tính trên dễ dàng đọc được bằng a.Name, tuy nhiên nhiều khi xây dựng các chức năng mà nhận được đối tượng và tên thuộc tính mà không cần biết đối tượng thuộc lớp nào thì có thể đọc giá trị thuộc tính bằng cách trên (gán giá trị tương tự với SetValue). Các này được áp dụng trong kỹ thuật Binding dữ liệu, ví dụ Biding một dữ liệu danh sách vào ListBox, tìm hiểu thêm trong các Control của WPF