public static void Main()
    {
        dynamic myObject = new MyClass();

        myObject.FirstName = "John";                                     // compile time naming - TrySetMember
        Console.WriteLine(myObject.FirstName);                           // TryGetMember
        myObject.AddProperty("Salary");                                  // runtime naming (try invoke "AddProperty" with argument "Salary")
        myObject.Salary = 35000m;
        Console.WriteLine(myObject.Salary);                              // TryGetMember
        myObject.AddProperty("DateOfBirth", new DateTime(1980, 23, 11)); // runtime naming (try invoke "AddProperty" with fisrt argument "DateOfBirth" and second argument the desired value)
        Console.WriteLine(myObject.DateOfBirth);                         // TryGetMember
        myObject.RemoveProperty("FirstName");                            // runtime naming (try invoke "RemoveProperty" with argument "FirstName")
        Console.WriteLine(myObject.FirstName);                           // Should print out empty string (or throw, depending on the desired bahavior) because the "FirstName" property has been removed from the internal dictionary.
    }