Реализация динамических возможностей на объекте без наследования DynamicObject? - PullRequest
3 голосов
/ 22 февраля 2011

Прямо сейчас у меня есть класс, который расширяет 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, что означает, что я не могу расширять что-либо еще. Можно ли сделать это без расширения DynamicObject?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

Вы можете реализовать IDynamicMetaObjectProvider самостоятельно. Это намного больше работы .

1 голос
/ 29 сентября 2017

Вы можете делегировать ребенку DynamicObject, например этот ответ (который начинается с ответа @ Lee, но с дополнительной работой), на повторяющийся вопрос SO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...