// Somewhere in a component, where this game object and all child game objects should have a message passed: this.BroadcastTypedMessage( (SampleComponent c) => c.FooNoParams); this.BroadcastTypedMessage( (SampleComponent c) => c.FooParam, true); // The compiler can figure out the generic types necessary and extracts the message's name from the given MethodInfo. // The generic types are strict enough that you can't even pass in the wrong type of parameter! This is a whole lot safer for refactoring. // Because this is static typed, intellisense also works perfectly. // I'm not sure if all expression trees given will be the same. It might need to be generalized for more exotic usage.