런타임에 개체에 동적 속성을 추가하는 것은 많은 애플리케이션에서 일반적인 요구 사항입니다. 이를 달성하기 위한 일반적인 접근 방식은 사전이나 매개변수 모음을 사용하는 것입니다. 그러나 속성의 수와 이름을 미리 알 수 없는 시나리오의 경우 이 접근 방식은 부족합니다.
.NET Framework는 이 문제에 대한 내장 솔루션인 ExpandoObject를 제공합니다. 이 클래스를 사용하면 런타임에 속성을 추가하고 제거할 수 있는 동적 객체를 생성할 수 있습니다.
// Create a dynamic object dynamic dynObject = new ExpandoObject(); // Add dynamic properties dynObject.SomeDynamicProperty = "Hello!"; // Execute dynamic actions dynObject.SomeDynamicAction = (msg) => { Console.WriteLine(msg); }; dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
더 복잡한 시나리오의 경우 고유한 동적 객체를 생성할 수 있습니다. DynamicObject 클래스를 구현하는 객체입니다. 이를 통해 동적 구성원 요청이 처리되는 방식을 더 효과적으로 제어할 수 있습니다.
public sealed class MyDynObject : DynamicObject { // Member dictionary private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } // Get dynamic member names public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; } // Try to get a dynamic member public override bool TryGetMember(GetMemberBinder binder, out object result) { if (_properties.ContainsKey(binder.Name)) { result = _properties[binder.Name]; return true; } else { result = null; return false; } } // Try to set a dynamic member public override bool TrySetMember(SetMemberBinder binder, object value) { if (_properties.ContainsKey(binder.Name)) { _properties[binder.Name] = value; return true; } else { return false; } } }
이 접근 방식을 사용하면 원하는 속성을 가진 동적 객체를 생성할 수 있습니다.
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
주의: 동적 개체를 사용할 때는 컴파일러가 동적 호출을 확인할 수 없으며 런타임 오류나 Intellisense 부족이 발생할 수 있다는 점에 유의하세요. 지원합니다.
위 내용은 런타임에 C# 속성을 동적으로 추가하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!