C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Phương thức - Delegate §8 Lớp - Class §9 Namespace §10 Partial, Nested §11 Kiểu giá trị, tham chiếu §12 Kiểu vô danh và dynamic §13 Biểu thức lambda §14 Event §15 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §16 null và nullable §17 Mảng §18 Chuỗi ký tự §19 Tính kế thừa §20 Phương thức khởi tạo §21 Tính đa hình - abstract - interface §22 Struct và Enum §23 Ngoại lệ Exeption §24 IDisposable - using §25 File cơ bản §26 FileStream §27 Generic §28 Collection - List §29 SortedList §30 Queue / Stack §31 Linkedlist §32 Dictionary - HashSet §33 Phương thức mở rộng §34 ObservableCollection §35 LINQ §36 (Multithreading) async - bất đồng bộ §37 Type §38 Attribute Annotation §39 DI Dependency Injection §40 (Multithreading) Parallel §41 Thư viện lớp §42 (Networking) HttpClient §43 (Networking) HttpMessageHandler §44 (Networking) HttpListener §45 (Networking) Tcp TcpListenerr/TcpClient §46 (ADO.NET) SqlConnection §47 (ADO.NET) SqlCommand §48 (EF Core) Tổng quan §49 (EF Core) Tạo Model §50 (EF Core) Fluent API §51 (EF Core) Query §52 (EF Core) Scaffold §53 (EF Core) Migration §54 (ASP.NET CORE) Hello World! §55 (ASP.NET CORE) Middleware §56 (ASP.NET CORE) Map - Request - Response §57 (ASP.NET CORE) IServiceCollection - MapWhen §58 (ASP.NET CORE) Session - ISession §59 (ASP.NET CORE) Configuration §60 (ASP.NET CORE) Gửi Mail §61 (ASP.NET RAZOR) Khởi tạo và Route §62 (ASP.NET RAZOR) Cú pháp Razor §63 (ASP.NET RAZOR) Layout trong ASP.NET Core §64 (ASP.NET RAZOR) Partial §65 (ASP.NET RAZOR) ViewComponent §66 (ASP.NET RAZOR) TagHelper §67 (ASP.NET RAZOR) PageModel §68 (ASP.NET RAZOR) Model Binding §69 (ASP.NET RAZOR) HTML Form, Validation §70 (ASP.NET RAZOR) Upload File §71 (ASP.NET RAZOR) HtmlHelper §72 (ASP.NET RAZOR) Entity Framework §73 (ASP.NET RAZOR) Paging §74 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §75 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §76 (ASP.NET RAZOR) Identity (3) Google Login §77 (ASP.NET RAZOR) Identity (4) Facebook Login §78 (ASP.NET RAZOR) Identity (5) profile, password, email ... §79 (ASP.NET RAZOR) Identity (6) Role §80 (ASP.NET RAZOR) Identity (7) Role-based Authorization §81 (ASP.NET RAZOR) Identity (8) RoleClaim §82 (ASP.NET RAZOR) Identity (9) Authorization Handler §83 (ASP.NET RAZOR) IAuthorizationService §84 (ASP.NET MVC) Controller - View §85 (ASP.NET MVC) MVC Route
Lập trình C# Cơ bản

Lớp Type

Trong .NET lớp Type dùng để biểu thị sự khai báo của: định nghĩa của lớp, mảng, enum, interface ... Muốn lấy Type của đối tượng object, dùng phương thức object.GetType(), nó trả về một Type - cho biết thông tin kiểu (class, interface, enum ...) của đối tượng.

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 tính 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)

using System;
using System.Reflection;

namespace CS025_Type {
    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
            };

            //Lấy tên và giá trị các thuộc tính có trong a
            foreach (PropertyInfo property in a.GetType().GetProperties())
            {
                string property_name = property.Name;         // Lấy tên thuộc tính
                object property_value = property.GetValue(a); // Đọc giá trị thuộc tính đối tượng a
                Console.WriteLine($"Thuộc tính {property_name} giá trị là {property_value}");
            }
        }
    }
}

Kết quả in ra là:
Kết quả:
Thuộc tính ID giá trị là 10
Thuộc tính Name giá trị 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

Type dùng nhiều trong DI Container

Tham khảo mã nguồn CS025_Type (git) hoặc tải về ex025

Đăng ký theo dõi ủng hộ kênh