...I come from an actionscript / PHP background that just doesn't have these things...
Once you get used to this kind of stuff in C#, and see how really well designed it is, you'll shake your head and wonder about dynamically typed languages like PHP. Not that there's anything wrong with dynamic types and the like, but static typing is really just a lot easier to deal with.
I've done both kinds of languages, and I really do prefer static typing. It just seems neater and cleaner.
Kind of as an aside, in C# you can also do things like this:
private void Something(MyCustomClass thing)
temp = thing;
It's a similar issue to what you have above.