首頁 > 後端開發 > C++ > 如何在運行時動態存取 C# 中的類別屬性?

如何在運行時動態存取 C# 中的類別屬性?

Patricia Arquette
發布: 2025-01-12 07:36:43
原創
869 人瀏覽過

How Can I Dynamically Access Class Attributes in C# at Runtime?

運行時動態存取類別屬性

物件導向程式設計中,屬性為類別及其成員提供額外的元資料。運行時檢索屬性值對於存取特定於類別的資訊或自訂行為非常有用。本文探討一種在運行時讀取分配給類別的屬性值的方法。

假設我們需要從「MyClass」類別取得「DomainName」屬性。此屬性屬於「DomainNameAttribute」類型,其值為「MyTable」。目標是建立一個泛型方法,動態讀取此屬性並傳回其值。

為此,我們可以利用.NET反射功能:

<code class="language-csharp">public string GetDomainName<T>()
{
    var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
    ).FirstOrDefault() as DomainNameAttribute;
    if (dnAttribute != null)
    {
        return dnAttribute.Name;
    }
    return null;
}</code>
登入後複製

在此程式碼中,我們使用「GetCustomAttributes」方法從指定的類型中擷取所有「DomainNameAttribute」類型的屬性。然後,我們將第一個(通常也是唯一一個)屬性強制轉換為「DomainNameAttribute」類型。如果屬性存在,則傳回其「Name」屬性。否則,返回null。

使用此方法,我們可以動態擷取執行階段的「DomainName」屬性值:

<code class="language-csharp">// 这应该返回 "MyTable"
String DomainNameValue = GetDomainName<MyClass>();</code>
登入後複製

為了將此功能推廣到任何屬性,我們可以建立一個擴充方法:

<code class="language-csharp">public static class AttributeExtensions
{
    public static TValue GetAttributeValue<TAttribute, TValue>(
        this Type type, 
        Func<TAttribute, TValue> valueSelector) 
        where TAttribute : Attribute
    {
        var att = type.GetCustomAttributes(
            typeof(TAttribute), true
        ).FirstOrDefault() as TAttribute;
        if (att != null)
        {
            return valueSelector(att);
        }
        return default(TValue);
    }
}</code>
登入後複製

使用方法如下:

<code class="language-csharp">string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);</code>
登入後複製

此泛化的擴充方法提供了存取與類型關聯的任何屬性的靈活性,使其成為運行時檢查類別屬性的通用工具。

以上是如何在運行時動態存取 C# 中的類別屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板