The ability to work with any programming language requires a
good understanding of the data types it offers in order to comprehend the
language’s possibilities and limitations. In this article, I look at the
characteristics and specifics of C# data types as a way for developers to have
a better grasp of what the language has to offer.

C# allows you to define two types of variables: value types
and reference types. The value types hold actual values, while reference types
hold references to values stored somewhere in memory. Value types are allocated
on the stack and are available in most programming languages. Reference types
are allocated on the heap and typically represent class instances. C# also
allows defining your own value and reference types in the code. All value and
reference types are derived from a base type called object. C# also lets you to convert from one type to another
through either implicit (don’t result in the loss of data) or explicit (may
result in loss of data/precision) conversions.

Predefined C# value types

  • sbyte: Holds 8-bit signed integers. The
    s in sbyte stands for signed, meaning that the
    variable’s value can be either positive or negative. The smallest possible
    value for ansbyte
    variable is -128; the largest possible value is 127.
  • byte: Holds 8-bit unsigned integers.
    Unlike sbyte variables, byte variables are not
    signed and can only hold positive numbers. The smallest possible value for
    a byte variable is 0; the largest possible value is 255.
  • short: Holds 16-bit signed integers. The
    smallest possible value for a short variable is -32,768; the largest
    possible value is 32,767.
  • ushort: Holds 16-bit unsigned integers.
    The u in ushort stands for unsigned. The
    smallest possible value of an ushort variable is
    0; the largest possible value is 65,535.
  • int: Holds 32-bit signed integers.
    The smallest possible value of an int variable
    is -2,147,483,648; the largest possible value is 2,147,483,647.
  • uint: Holds 32-bit unsigned integers.
    The u in uint stands for unsigned. The smallest
    possible value of a uint variable is 0; the
    largest possible value is 4,294,967,295.
  • long: Holds 64-bit signed integers.
    The smallest possible value of a long variable is
    9,223,372,036,854,775,808; the largest possible value is
    9,223,372,036,854,775,807.
  • ulong: Holds 64-bit unsigned integers.
    The u in ulong stands for unsigned. The smallest
    possible value of a ulong
    variable is 0; the largest possible value is 18,446,744,073,709,551,615.
  • char: Holds 16-bit Unicode characters.
    The smallest possible value of a char variable is the Unicode character
    whose value is 0; the largest possible value is the Unicode character
    whose value is 65,535.
  • float: Holds a 32-bit signed
    floating-point value. The smallest possible value of a float type is
    approximately 1.5 times 10 to the 45th power; the largest possible value
    is approximately 3.4 times 10 to the 38th power.
  • double: Holds a 64-bit signed
    floating-point value. The smallest possible value of a double is
    approximately 5 times 10 to the 324th; the largest possible value is approximately
    1.7 times 10 to the 308th.
  • decimal: Holds a 128-bit signed
    floating-point value. Variables of type decimal are good for financial
    calculations. The smallest possible value of a decimal type is approximately
    1 times 10 to the 28th power; the largest possible value is approximately
    7.9 times 10 to the 28th power.
  • bool: Holds one of two possible values,
    true or false. The use of the bool type is one
    of the areas in which C# breaks from its C and C++ heritage. In C and C++,
    the integer value 0 was synonymous with false, and any nonzero value was
    synonymous with true. In C#, however, the types are not synonymous. You
    cannot convert an integer variable into an equivalent bool
    value. If you want to work with a variable that needs to represent a true
    or false condition, use a bool variable and not
    an int variable.

Predefined C# reference types

  • string: Represents a string of Unicode
    characters. It allows easy manipulation and assignment of strings. Strings
    are immutable, meaning that once it is created it can’t be modified. So
    when you try to modify a string, such as concatenating it with another
    string, a new string object is actually created to hold the new resulting
    string.
  • object: Represents a general purpose
    type. In C#, all predefined and user-defined types inherit from the object
    type or System.Object class.

Summary

Proper utilization of correct data types allows developers
to make the most of the language, but may take some time for those who have
used different programming languages prior to switching to C#. For more
information about each type, visit the Microsoft Web
site
.

Irina Medvinskaya has been involved in technology since 1996. She has an MBA from Pace University and works as a Project Manager at Citigroup.

Subscribe to the Developer Insider Newsletter

From the hottest programming languages to commentary on the Linux OS, get the developer and open source news and tips you need to know. Delivered Tuesdays and Thursdays

Subscribe to the Developer Insider Newsletter

From the hottest programming languages to commentary on the Linux OS, get the developer and open source news and tips you need to know. Delivered Tuesdays and Thursdays