using System.Collections.Generic;
public static void Main()
dynamic person = new PersonObject();
Func<int, int> increment = (int n) =>
person.IncrementAge = increment;
Console.WriteLine($"{person.Name} - {person.Age}");
Console.WriteLine($"{person.Name} - {person.Age}");
class PersonObject : DynamicObject
Dictionary<string, object> members = new Dictionary<string, object>();
public override bool TrySetMember(SetMemberBinder binder, object? value)
members[binder.Name] = value;
public override bool TryGetMember(GetMemberBinder binder, out object? result)
if (members.ContainsKey(binder.Name))
result = members[binder.Name];
public override bool TryInvokeMember(InvokeMemberBinder binder, object? []? args, out object? result)
if (args?[0] is int number)
dynamic method = members[binder.Name];