런타임에 동적으로 속성을 추가하는 것은 다양한 프로그래밍 시나리오에서 일반적인 요구 사항입니다. 특정 상황에서는 사전이나 컬렉션 사용과 같은 접근 방식이 충분할 수 있지만 일부 사용 사례에는 적합하지 않을 수 있습니다. ExpandoObject를 활용하는 대체 솔루션을 살펴보겠습니다.
ExpandoObject는 런타임 시 동적으로 멤버를 추가 및 제거할 수 있는 .NET의 내장 클래스로, 멤버 할당 및 검색이 가능합니다. 표준 도트 구문을 통한 값. 이 접근 방식은 즉시 결정되는 속성을 사용하여 동적 개체를 생성하는 편리한 방법을 제공합니다.
ExpandoObject를 사용하려면 간단히 새 인스턴스를 생성하고 필요에 따라 속성을 할당하면 됩니다.
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!";
동적 개체의 동작 방식에 대한 특정 요구 사항이 있는 경우 DynamicObject 클래스를 확장하고 멤버 액세스 및 처리를 위한 사용자 정의 논리를 구현할 수 있습니다. 수정. 예는 다음과 같습니다.
sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } public override IEnumerable<string> GetDynamicMemberNames() { return _properties.Keys; } public override bool TryGetMember(GetMemberBinder binder, out object result) { return _properties.TryGetValue(binder.Name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { _properties[binder.Name] = value; return true; } }
이 사용자 정의 동적 개체를 사용하면 속성이 포함된 동적 개체를 생성하고 런타임에 동적으로 수정할 수 있습니다.
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 } }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
동안 DynamicObject를 사용하면 유연성과 사용 용이성을 제공할 뿐만 아니라 몇 가지 잠재적인 가능성도 제공합니다. 단점:
따라서 개발 요구 사항에 가장 적합한 접근 방식을 선택할 때 이러한 고려 사항과 동적 개체 조작의 이점 사이의 균형을 맞추는 것이 중요합니다.
위 내용은 ExpandoObject 및 DynamicObject를 사용하여 런타임에 C# 속성을 동적으로 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!