iT邦幫忙

0

PropertyInfo 類別和PropertyDescriptorCollection 類別差異性

  • 分享至 

  • xImage

請問PropertyInfo 類別和PropertyDescriptorCollection 類別差異性

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-22 08:21:25

PropertyInfo 類別和 PropertyDescriptorCollection 類別都是用於反射的類別,可以用於訪問和操作 .NET 類型的公共和私有屬性。但是它們之間有一些重要的差異。

PropertyInfo 類別表示執行個體中的公共或私有屬性。它包含有關屬性的許多資訊,例如名稱、類型、用於訪問屬性的 get 和 set 方法,以及可以在屬性上應用的修飾符。可以使用 PropertyInfo 類別的 GetValue 和 SetValue 方法來讀取或設置屬性的值。

使用PropertyInfo類別的範例程式碼:

using System;
using System.Reflection;

class MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass();
        obj.Name = "John";
        obj.Age = 30;

        // 取得MyClass類別的屬性資訊
        PropertyInfo propInfo = obj.GetType().GetProperty("Name");

        // 取得屬性名稱
        Console.WriteLine("屬性名稱: {0}", propInfo.Name);

        // 取得屬性型別
        Console.WriteLine("屬性型別: {0}", propInfo.PropertyType);

        // 取得屬性限制
        Console.WriteLine("屬性限制: {0}", propInfo.PropertyType);

        // 取得屬性的值
        Console.WriteLine("屬性的值: {0}", propInfo.GetValue(obj));
    }
}

PropertyDescriptorCollection 類別是一個集合,它包含用 PropertyDescriptor 類別表示的屬性描述符。PropertyDescriptor 類別是一個抽象基底類別,它提供了一組方法,用於訪問和操作某個特定屬性。它不包含有關屬性的所有資訊,例如類型和用於訪問屬性的方法。但是,它提供了一些更高級的功能,例如支援繫結和屬性描述符的比較。

使用PropertyDescriptorCollection類別的範例程式碼:

using System;
using System.ComponentModel;

class MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        MyClass obj1 = new MyClass();
        obj1.Name = "John";
        obj1.Age = 30;

        MyClass obj2 = new MyClass();
        obj2.Name = "Alice";
        obj2.Age = 25;

        // 將物件加入PropertyDescriptorCollection
        PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj1, obj2);

        // 取得第一個物件的名稱屬性
        PropertyDescriptor prop1 = props[0];
        Console.WriteLine("物件1的屬性名稱: {0}", prop1.Name);

        // 取得第二個物件的年齡屬性
        PropertyDescriptor prop2 = props[1];
        Console.WriteLine("物件2的屬性名稱: {0}", prop2.Age);
    }
}

結論:
從上面的程式碼可以看出,PropertyInfo類別主要用於取得單個物件的屬性資訊,而PropertyDescriptorCollection類別則可以用於取得多個物件的屬性資訊。
總的來說,PropertyInfo 類別提供了更低級的反射功能,而 PropertyDescriptorCollection 類別提供了更高級的功能,例如繫結和比較。適當使用這兩個類別取決於您希望完成的任務。

我要發表回答

立即登入回答