Zmienna to nic innego niż obszar w pamięci komputera do której możemy przypisać jakąś wartość. W języku C# każda zmienna ma określony typ, który określa jej wielkość oraz zakres przechowywanych wartości, który jest adekwatny do rozmiaru w pamięci danej zmiennej. Dodatkowo, każdy typ danych charakteryzuje się zestawem operacji, które mogą być wykonywane na danym typie danych.

Podstawowe typy zmiennych w języku C# możemy podzielić na:
Typ Przykład
typy integralne (Integral types) sbyte, byte, short, ushot, int, uint, ulong, char
typy zmiennoprzecinkowe (Floating point types) float oraz double
typy dziesiętne (Decimal types) decimal
typy logiczne (Boolean types) true lub false
typy puste (Nullable types) Nullable<Int32>
C# pozwala również na zdefiniowanie innych typów, takich jak typ wyliczeniowy (enum) oraz typy referencyjny (reference type), np. klasy, które zostaną omówione w kolejnych rozdziałach.

Definiowanie zmiennych

Składnia definicji zmiennej w C#:
typ_danych nazwa_zmiennej;

typ_danych musi być zgodny z typami zdefiniowanymi w języku C#, tj. char, int, float, double bądź dowolnym typem zdefiniowanym przez użytkownika. Możemy oczywiście zdefiniować jedną lub więcej nazwa_zmiennej, ale muszą być od siebie oddzielone przecinkami.

Przykład poprawnej definicji zmiennych:
int i, j, k;
char c, ch;
float f, salary;
double d;
Możesz zainicjować zmienną w czasie jej definicji:
int i = 100;

Inicjowanie zmiennych

Zmienne są inicjowane (przypisanie wartości) za pomocą znaku równości:
nazwa_zmiennej = wartość;

Zmienne mogą być również inicjowane w trakcie deklaracji:
typ_danych nazwa_zmiennej = wartość;

Kilka przykładów:
int d = 3, f = 5;    /* inicjowanie zmiennej d oraz zmiennej f. */
byte z = 22;         /* inicjowanie zmiennej z. */
double pi = 3.14159; /* deklaracja liczby pi. */
char x = 'x';        /* zmienna x przyjmuje wartość 'x'. */

W poniższym przykładzie pokazano użycie różnych typów zmiennych:
using System;
namespace Zmienne
{
    class Program
    {
        static void Main(string[] args)
        {
            short s;
            int i;
            double d;
            // Inicjowanie zmiennych
            s = 10;
            i = 20;
            d = s + i;
            // Wyświetlenie w konsoli wartości kolejnych zmiennych
            // Rezultat wykonania programu: s = 10, i = 20, d = 30
            Console.WriteLine("s = {0}, i = {1}, d = {2}", s, i, d);
            Console.ReadLine();
        }
    }
}

Akceptowanie danych od użytkownika

Klasa Console dostępna w przestrzeni nazw System udostępnia metodę ReadLine() pozwalającą na przyjmowanie danych od użytkownika, które następnie mogą być przypisane do zmiennej.
Przykład:
int liczba;
liczba = Convert.ToInt32(Console.ReadLine());
Metoda Convert.ToInt32() konwertuje dane wprowdzone przez użytkownika na typ danych int. Dlaczego taki krok jest potrzebny? Wszystkie dane wprowadzane przez użytkownika to dane łańcuchowe, string.