Consider the following code:
void Handler(object o, EventArgs e) { // I swear o is a string string s = (string)o; // 1 //-OR- string s = o as str
2 is useful for casting to a derived type.
Suppose a is an Animal:
b = a as Badger; c = a as Cow; if (b != null) b.EatSnails(); else if (c != null) c.EatGrass();
will get a fed with a minimum of casts.