Type safety and casting as I thought are closely coupled and if a type can't be casted to another type it should be caught during compilation. Or to put it another way could a method return some other type than what it's instructed to do?
To reproduce what I mean try MSDN code sample under:
System.Windows.Forms\Binding class
Cetin