That's late binding. The dynamic type was added to C# some time ago to support basically the same thing.