런타임에 동적으로 C# 속성 추가
이 기사에서는 이전 논의를 확장하여 런타임에 객체에 속성을 동적으로 추가하는 대체 접근 방식을 탐색합니다. 컬렉션에 의지하거나 사전.
ExpandoObject
ExpandoObject는 멤버를 동적으로 추가하고 제거하는 편리한 방법을 제공합니다. .NET의 동적 바인딩 지원을 활용하므로 표준 구문을 사용하여 속성에 액세스하고 설정할 수 있습니다.
dynamic dynObject = new ExpandoObject(); dynObject.SomeDynamicProperty = "Hello!"; dynObject.SomeDynamicAction = (msg) => { Console.WriteLine(msg); }; dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
사용자 정의된 동적 개체
더 구체적인 시나리오의 경우 사용자 정의 DynamicObject 구현을 만들 수 있습니다. 여기에는 DynamicObject에서 상속되는 클래스를 정의하고 재정의된 메서드에서 멤버 액세스 및 설정을 처리하는 작업이 포함됩니다.
public static dynamic GetDynamicObject(Dictionary<string, object> properties) { return new MyDynObject(properties); } public sealed class MyDynObject : DynamicObject { private readonly Dictionary<string, object> _properties; public MyDynObject(Dictionary<string, object> properties) { _properties = properties; } // Overridden methods for member access and setting }
사용:
var dyn = GetDynamicObject(new Dictionary<string, object>() { { "prop1", 12 }, }); Console.WriteLine(dyn.prop1); dyn.prop1 = 150;
고려 사항:
ExpandoObject 및 사용자 정의 DynamicObject 구현은 다음을 제공합니다. 유연성이 있기 때문에 잠재적인 위험이 따릅니다. 성능 영향, 개발자 경험 및 런타임 예외 가능성을 고려하여 주의해서 사용하세요.
위 내용은 런타임에 C# 개체에 속성을 동적으로 추가하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!