Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Hiển thị tất cả các trường và thuộc tính của một đối tượng

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Thumbs down Hiển thị tất cả các trường và thuộc tính của một đối tượng

    Visual Studio cung cấp một công cụ giúp những nhà phát triển có thể quan sát các hoạt động, nó cung cấp rất nhiều thông tin hữu ích đặc biệt trong quá trình xử lý lỗi (debug). Tuy vậy đôi khi việc quan sát các đối tượng trong suốt phiên xử lý lỗi tương tác không phải là đã đủ. Khi làm việc với các ứng dụng đa hoạt động xảy ra trong cùng một thời điểm như dữ liệu đang vào hay các sự kiện phát sinh, những hoạt động không thể điều khiển trong cùng một thời gian. Đôi khi, hoạt động gỡ lỗi (debug) của chính nó còn khiến vấn đề càng đi xa hơn và có khi còn bị che dấu trong suốt thời gian phiên gỡ lỗi tương tác.

    Trong trường hợp này, bạn cần phải kết xuất trạng thái của một số đối tượng trước và sau khi sự kiện diễn ra để xác định xem những gì đang xảy ra. Cách đơn giản nhất để thực hiện vấn đề này là sử dụng sự phản xạ để có một đối tượng có trạng thái kết xuất của chính nó. Chính vì vậy đã tạo một phương pháp tĩnh trong một lớp tiện ích, sử dụng một đối tượng và trả về một chuỗi gồm có kiểu của đối tượng cũng như các giá trị của tất cả các trường và thuộc tính của đối tượng này. Đây là toàn bộ phương pháp các bạn có thể tham khảo:

    Visual C# Code:
    1. public static string DisplayObjectInfo(Object o)
    2. {
    3. StringBuilder sb = new StringBuilder();
    4.  
    5. // Include the type of the object
    6. System.Type type = o.GetType();
    7. sb.Append("Type: " + type.Name);
    8.  
    9. // Include information for each Field
    10. sb.Append("\r\n\r\nFields:");
    11. System.Reflection.FieldInfo[] fi = type.GetFields();
    12. if (fi.Length > 0)
    13. {
    14.         foreach (FieldInfo f in fi)
    15.         {
    16.               sb.Append("\r\n " + f.ToString() + " = " +
    17.              f.GetValue(o));
    18.         }
    19. }
    20.         sb.Append("\r\n None");
    21.  
    22. // Include information for each Property
    23. sb.Append("\r\n\r\nProperties:");
    24. System.Reflection.PropertyInfo[] pi = type.GetProperties();
    25. if (pi.Length > 0)
    26. {
    27.              foreach (PropertyInfo p in pi)
    28.              {
    29.                      sb.Append("\r\n " + p.ToString() + " = " +
    30.                      p.GetValue(o, null));
    31.              }
    32. }
    33.              sb.Append("\r\n None");
    34. return sb.ToString();
    35. }

    Phương thức DisplayObjectInfo đầu tiên có kiểu hiện tại của tham số đối tượng. Sau quá trình xử lý nó cho ta một danh sách tất cả các trường của đối tượng, có kiểu dữ liệu tên và giá trị của mỗi trường. Tương tự thực hiện với mỗi thuộc tính của đối tượng. Kết quả cuối cùng là một chuỗi gồm có các kiểu đối tượng cũng như tất cả các giá trị của thuộc tính và trường của nó. Sau đó có thể thực hiện bất cứ những gì cần với chuỗi này. Nó có thể được hiển thị trên một biểu mẫu, trong một hộp thông báo, gửi đến một bản ghi sự kiện…. Ở đây, chúng ta sẽ sử dụng ví dụ về việc gửi nội dung của đối tượng GPSLocation từ một tip trước đó đến cửa sổ đầu ra.

    Visual C# Code:
    1. GPSLocation Location = new GPSLocation(39, -86, 50, 180);
    2. Debug.Print(Util.DisplayObjectInfo(Location));

    Các kết quả trong cửa sổ đầu ra:

    Output Code:
    1.  
    2.    1. Type: GPSLocation
    3.    2. Fields:
    4.    3. None
    5.    4. Properties:
    6.    5. Double Latitude = 39
    7.    6. Double Longitude = -86
    8.    7. Int32 Speed = 50
    9.    8. Int32 Direction = 180

    Với kiểu thông tin chuẩn đoán này, nó sẽ giúp cho chúng ta dễ dàng hơn trong việc gỡ lỗi. Rõ ràng, bạn hoàn toàn có thể chọn để xuất ra các kết quả theo bất cứ định dạng nào và đến bất cứ nguồn nào phù hợp với bạn. Kiểu phương thức này cũng rất hữu dụng nếu bạn cần phải kết xuất trạng thái các đối tượng khi một ngoại lệ xuất hiện.

    Anh Linh (Theo Developer)
    Keep moving forward!

    ... Retired ...

  2. #2
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Bổ sung chút : Đây là kỹ thuật ánh xạ đối tượng (Object Reflection) chứ không phải phản xạ - Thuật ngữ gọi hơi sai chút . Cái này trong hầu hết các ngôn ngữ hiện đại hỗ trợ OOP đều có hỗ trợ cái này (như C#, Java, ... còn nhiêu nữa không rõ lắm :|). Nói một cách ngắn gọn sẽ có một số lớp (class) thư viện dựng sẵn cho phép đọc và hiển thị thông tin của một đối tượng (object) trong quá trình chương trình chạy.
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

Các đề tài tương tự

  1. Thuốc chữa gan nhiễm mỡ bằng thuốc gia truyền đơn giản mà hiệu quả
    Gửi bởi thuocnamtot trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-04-2013, 10:39 PM
  2. Thuốc chữa gan nhiễm mỡ bằng thuốc gia truyền đơn giản mà hiệu quả
    Gửi bởi thuocnamtot trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-03-2013, 10:56 PM
  3. Thuật toán và giải thuật tạo serial của IDM [Hướng dẫn chi tiết]
    Gửi bởi luc13aka47 trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 4
    Bài viết cuối: 31-05-2012, 06:40 PM
  4. Trả lời: 1
    Bài viết cuối: 04-01-2012, 10:21 AM
  5. Bài tập C [GIÚP MÌNH GẤP] tạo ngẫu nhiên n tọa độ (x,y) với x thuộc (0.1,0.2) y thuộc (-200,-50)
    Gửi bởi deathsman trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 29-12-2011, 10:57 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn