C# 在对象上实现动态功能而不继承DynamicObject?
现在我有一个类扩展了DynamicObject并覆盖了TryGetMemberC# 在对象上实现动态功能而不继承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
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问题