An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
Humm... I think this is not the most appropriate answer because it does not explain why the compiler won't complain the following code snippet:
UInt32 A = 1;
UInt32 B = 2;
UInt32 C = A * B;
Console.WriteLine(C);
IMO the real reason is that the MSIL only define arithmetic operators for 32-bit operands only, so the parameter and result of multiplication is Int32/UInt32 before return, and that won't fit in UInt16 therefore explicit conversion is required.