> 백엔드 개발 > C++ > 런타임에 C# 속성을 동적으로 추가하려면 어떻게 해야 합니까?

런타임에 C# 속성을 동적으로 추가하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-12-30 20:09:16
원래의
927명이 탐색했습니다.

How Can I Add C# Properties Dynamically at Runtime?

ExpandoObject를 사용하여 런타임에 C# 속성을 동적으로 추가

런타임에 개체에 동적 속성을 추가하는 것은 많은 애플리케이션에서 일반적인 요구 사항입니다. 이를 달성하기 위한 일반적인 접근 방식은 사전이나 매개변수 모음을 사용하는 것입니다. 그러나 속성의 수와 이름을 미리 알 수 없는 시나리오의 경우 이 접근 방식은 부족합니다.

ExpandoObject 사용

.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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