Для значущих типів значенням змінної є число або символ.
Для посилальних типів значенням змінної є посилання на певний об'єкт, розташований у динамічній пам'яті.
Кілька посилальних змінних можуть вказувати на один і той самий об'єкт та використовувати його значення.
У цьому прикладі на початку програми змінні a та b містили різні адреси у пам'яті.
int[] arrayA = { 1, 2, 3, 4, 5 };
int[] arrayB = { 6, 7, 8 };
// Виведення початкових масивів
Console.WriteLine("Початковий масив A:");
for (int i = 0; i < arrayA.Length; i++)
Console.Write("{0} ", arrayA[i]);
Console.WriteLine("\nПочатковий масив B:");
for (int i = 0; i < arrayB.Length; i++)
Console.Write("{0} ", arrayB[i]);
// Присвоєння посилання (arrayB тепер вказує на arrayA)
arrayB = arrayA;
// Зміна значень через обидва посилання
arrayB[0] = 100;
arrayA[1] = 200;
// Виведення результатів
Console.WriteLine("\n\nМасив A після змін:");
for (int i = 0; i < arrayA.Length; i++)
Console.Write("{0} ", arrayA[i]);
Console.WriteLine("\nМасив B після змін:");
for (int i = 0; i < arrayB.Length; i++)
Console.Write("{0} ", arrayB[i]);
Console.WriteLine("\n\nНатисніть будь-яку клавішу...");
Console.ReadKey();
Після виконання оператора b=a, обидві змінні a та b почали містити адресу масиву a. Тобто, до одного й того самого масиву можна звертатися як за іменем a, так і за іменем b.
Отже, оператор b[0]=100 присвоїть значення 100 і a[0], а оператор a[1]=200 присвоїть значення 200 і b[1]. Це видно після виведення масивів a та b на екран.
Результат виконання:
Початковий масив A:
1 2 3 4 5
Початковий масив B:
6 7 8
Масив A після змін:
100 200 3 4 5
Масив B після змін:
100 200 3 4 5
Натисніть будь-яку клавішу...