I just really don't see this as a great feature. I mean they act like if we don't have this dynamic typing then we have no way to do this without reflection. Well god forbid we define interfaces for objects so that we can access different objects that don't share heirarchies. At least if we use Interfaces and pass our objects into a method that defines the parameter as the interface type then if someone tries to pass an object that doesn't support that interface then we get an error at compile time. Just defining parameters as object types could result in a lot of runtime errors in complex programs. This sort of thing should be used sparingly IMO. While there are some times when these features could come in handy, you really need to look at the problem and ask yourself whether this feature is making your code easier to write or whether you are making your code more robust. A lot of the time doing the right thing and doing the easy thing are completely different.