C# provides a set of predefined types called the simple types. Some examples are: byte, short, int, long, char, float, double and bool. So C# has all the primitive types of Java. In addition, C# has unsigned/signed variants of the integer types: they are sbyte, ushort, uint and ulong. C# also has a simple type called decimal which can be used for the exact representation of monetary values.
The names of these simple types are keywords (reserved words). All of them are simply aliases for some predefined struct types. It is as if we had written:
using char = System.Char; using double = System.Double; using int = System.Int32;
Because a simple type (e.g., int) is just an alias for a struct type (e.g., System.Int32), every simple type has the members that the struct type has. For example:
int tLargest = int.MaxValue;
int tLargest = System.Int32.MaxValue;
And the two calls of ToString in:
int tSomeInt = 123; string tFirstString = tSomeInt.ToString(); string tSecondString = 123.ToString();