首页 > 后端开发 > 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;
登录后复制

警告: 使用动态对象时,请注意编译器将无法验证您的动态调用,并且您可能会遇到运行时错误或缺乏智能感知支持。

以上是如何在运行时动态添加 C# 属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板