> 백엔드 개발 > C++ > ExpandoObject 및 DynamicObject를 사용하여 런타임에 C# 속성을 동적으로 추가하는 방법은 무엇입니까?

ExpandoObject 및 DynamicObject를 사용하여 런타임에 C# 속성을 동적으로 추가하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-30 15:31:10
원래의
489명이 탐색했습니다.

How to Dynamically Add C# Properties at Runtime Using ExpandoObject and DynamicObject?

런타임에 C# 속성을 동적으로 추가하는 방법

소개

런타임에 동적으로 속성을 추가하는 것은 다양한 프로그래밍 시나리오에서 일반적인 요구 사항입니다. 특정 상황에서는 사전이나 컬렉션 사용과 같은 접근 방식이 충분할 수 있지만 일부 사용 사례에는 적합하지 않을 수 있습니다. ExpandoObject를 활용하는 대체 솔루션을 살펴보겠습니다.

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를 사용하면 유연성과 사용 용이성을 제공할 뿐만 아니라 몇 가지 잠재적인 가능성도 제공합니다. 단점:

  • 런타임 확인: 컴파일러는 동적 호출을 확인할 수 없으므로 런타임 오류가 발생할 가능성이 있고 디버깅 기능이 저하됩니다.
  • Intellisense 지원 : 동적 개체는 개발 환경에서 Intellisense 지원을 제공하지 않으므로 다음에서 사용 가능한 속성을 탐색하고 탐색하기가 더 어렵습니다. 런타임.

따라서 개발 요구 사항에 가장 적합한 접근 방식을 선택할 때 이러한 고려 사항과 동적 개체 조작의 이점 사이의 균형을 맞추는 것이 중요합니다.

위 내용은 ExpandoObject 및 DynamicObject를 사용하여 런타임에 C# 속성을 동적으로 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿