.NET: CLS (Common Language Specification), CLR (Common Language Runtime), using keyword

CLS: “common language specification”, set of rules that describe what features a .NET-aware compiler must support to produce code that can be hosted by the CLR. It’s a subset of the full functionality defined by the CTS (common type specification).

CLR: “common language runtime”, mscoree.dll:

  1. resolves the location of an assembly
  2. finds the requested type in the binary (by reading metadata)
  3. lays out the type in memory
  4. compiles associated CIL into platform specific instructions
  5. performs security checks
  6. executes the code

Using keyword is just shorthand notation, using it or the fully qualified name has no effect on performance or the size of the assembly. CIL code always uses fully qualified names.

CLI: “common language infrastructure”, ecma spec, describes executable code and runtime environment for .NET


BCL: “base class libraries”, encapsulate primitives such as threads, graphical rendering, file input/output, data access, winforms, security, xml/soap, webforms.

CLR includes CTS and CLS:


JIT: “just in time” compiler that translates IL (intermediate language) into native machine code at runtime. Also known as ‘Jitter’, it will cache already compiled machine code in memory.

CLR: “common language runtime”, primary role is to locate, load, and manage .NET types on your behalf. Also takes care of memory management and performs security checks.

CTS: “common type system”, describes all possible data types and programming constructs supported by the runtime, specifies how they can interact with each other, details how they are represented in the .NET metadata format.

CLS: “common language specification”, subset of common types and programming constructs that all .NET programming languages can agree on.