The Common Type System (CTS) ensures that components written in C# or VB.NET can interact with each other. The CTS supports two general categories of types: Value types and Reference types. Value types directly contain data. An instance of a value type is either allocated on the stack or allocated inline in a structure. These types can be natively built-in (native data types), user-defined or enumerations. A reference type, in contrast to a value type, stores a reference to the value’s memory address and is allocated on the heap. A reference type can be a self-describing type, a pointer type or an interface type. As said, the native .NET types are in general fully compatible, but naming and assigning is different between VB.NET and C#.