Original Post
This is an approach I have seen used in ASP.NET 2.0 and several other places, and I've also found an use for it in one of my compilers. What is its name? The approach consists in delaying an action on an object until the point when the object becomes known. For example, in my compiler, I will usually read a function being called, and only some time after that would I read the function declaration. The general way of handling this is doing a second pass, once all functions are defined, to check that any called functions do exist. The approach I use here consists in saying "Check that function FOO exists." This checks an "error" flag which, if it is still present at the end of processing, results in an error. As soon as the FOO function is defined, all function calls referencing it are automatically updated: the number and types of arguments are checked, and so on. When applied to sets of objects, this becomes even more useful. For instance, I could decide that for each type constraint on the arguments of FOO, I want to perform some simple operation (typically propagating that type constraint locally). When I read a function call, the function may have already been defined, so half its constraints are present, and the other half isn't yet. This means that "for each constraint" would execute the function immediately for existing constraints, and execute it for the rest as they are added. This is similar to what the ASP.NET 2.0 framework does: when you add a Button to a CompositeControl, even though you do it long after all events have been handled, any events that were intended to be activated on the button are activated immediately, as if the button has been there since the very beginning.