The CLS was designed to be large enough to include the language constructs that are commonly needed by developers,
yet small enough that most languages are able to support it. In addition, any language construct that makes
it impossible to rapidly verify the type safety of code was excluded from the CLS so that all CLS-compliant languages can produce verifiable code if they choose to
the Common Language Specification (CLS), which is a set of basic language features needed by many applications,
has been defined. The CLS rules define a subset of the common type system; that is, all the rules that apply
to the common type system apply to the CLS, except where stricter rules are defined in the CLS.
The CLS helps enhance and ensure language interoperability by defining a set of features that
developers can rely on to be available in a wide variety of languages. The CLS also establishes
requirements for CLS compliance; these help you determine whether your managed code conforms
to the CLS and to what extent a given tool supports the development of managed code that uses CLS features.
for more information visit : http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx