The CLR is always a strongly-typed typesystem; it's built into the core of the runtime, and cannot be abridged or avoided in any way (except through some dangerous unmanaged code accessed through P/Invoke, requiring necessary CAS permissions). There is no notion of "weak typing" as in otherlanguages. But that doesn't stop the CLR (and JVM, among others) from providing the capability to interact with objects defined in this strongly-typed platform in a loosely-bound manner, through the Reflection APIs. Through Reflection, I can effectively defer all decisions about type-enforcement until runtime, gaining a certain measure of flexibility at the expense of compile-time assistance in proving program correctness.
- Dynamic Typiing != weak typing. For instance, C++ is statically, but weakly typed. Python and Smalltalk are dynamically, but strongly typed.
- Flexibility at the expense of runtime correctness? You mean I've never seen a Null Pointer Exception in Java?