DynamicObject
是 C# 中的一個基類,它允許你在運行時動態地處理對象的行為。要使用 DynamicObject
,你需要創建一個繼承自它的類,并重寫其中的方法以定義動態行為。以下是一個簡單的示例:
using System;
using System.Dynamic;
public class MyDynamicObject : DynamicObject
{
// 重寫 TrySetMember 方法以自定義屬性設置行為
public override bool TrySetMember(SetMemberBinder binder, object value)
{
Console.WriteLine($"Setting property '{binder.Name}' to '{value}'");
// 將值存儲在一個字典中,以便在需要時訪問
this.AdditionalData[binder.Name] = value;
return true;
}
// 重寫 TryGetMember 方法以自定義屬性獲取行為
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
Console.WriteLine($"Getting property '{binder.Name}'");
// 從字典中獲取值并返回
return this.AdditionalData.TryGetValue(binder.Name, out result);
}
}
class Program
{
static void Main()
{
dynamic obj = new MyDynamicObject();
obj.Property1 = "Hello";
obj.Property2 = 42;
Console.WriteLine($"Property1: {obj.Property1}");
Console.WriteLine($"Property2: {obj.Property2}");
}
}
在這個示例中,我們創建了一個名為 MyDynamicObject
的類,它繼承自 DynamicObject
。我們重寫了 TrySetMember
和 TryGetMember
方法,以便在設置和獲取屬性時可以執行自定義邏輯。在這個例子中,我們將屬性值存儲在一個名為 AdditionalData
的字典中,并在需要時從中檢索它們。
在 Main
方法中,我們創建了一個 MyDynamicObject
實例,并使用動態語法設置了兩個屬性。當我們嘗試獲取這些屬性時,TryGetMember
方法會被調用,從而輸出相應的信息。