Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在对象上实现动态功能而不继承DynamicObject?_C#_.net_Inheritance_Dynamic - Fatal编程技术网

C# 在对象上实现动态功能而不继承DynamicObject?

C# 在对象上实现动态功能而不继承DynamicObject?,c#,.net,inheritance,dynamic,C#,.net,Inheritance,Dynamic,现在我有一个类扩展了DynamicObject并覆盖了TryGetMember public class FieldCollection : DynamicObject, ICollection<Field>, ISerializable { ... public override bool TryGetMember(GetMemberBinder binder, out object result) { var field = _inner

现在我有一个类扩展了DynamicObject并覆盖了TryGetMember

public class FieldCollection : DynamicObject, ICollection<Field>, ISerializable
{
    ...

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        var field = _inner.TryGetField(binder.Name);

        result = field == null ? null : field.Value;
        return true;
    }

    ...
}

dynamic fields = new FieldCollection();
Console.WriteLine(fields.Foo);
公共类字段集合:DynamicObject、ICollection、ISerializable
{
...
公共重写bool TryGetMember(GetMemberBinder绑定器,输出对象结果)
{
var字段=_inner.TryGetField(binder.Name);
结果=字段==空?空:field.Value;
返回true;
}
...
}
动态字段=新字段集合();
Console.WriteLine(fields.Foo);

这很好,但我不得不扩展DynamicObject,这意味着我不能扩展任何其他内容。是否可以在不扩展DynamicObject的情况下执行此操作?

您可以自己实现
IDynamicMetaObjectProvider
。它是。

你可以委托给孩子
DynamicObject
,比如(从@Lee的答案开始,但做了额外的工作)一个重复的SO问题