Stałe odnoszą się do wartości, których program nie może zmieniać w trakcie wykonywania. Te stałe wartości nazywane są również literałami. Stałe mogą być dowolnego typu wartościowego, mogą to być liczby całkowite, liczby zmiennoprzecinkowe czy zdefiniowane łańcuchy znaków.

Stałe traktowane są jak zwykłe zmienne z zaznaczeniem, że ich wartości nie mogą być modyfikowane.

Literały całkowite (integer literals)

Liczba całkowita może zostać przedstawiona w zapisie dziesiętnym, ósemkowym czy szesnastkowym. Prefiks określa jaki to typ reprezentacji danych. 0x lub 0X dla systemu szesnastkowego, 0 dla ósemkowego oraz brak prefiksu dla systemu dziesiętnego.

Liczba całkowita może mieć również przedrostek, który jest połączeniem U oraz L. U dla niepodpisanych wartości (bez możliwości przechowywania ujemnych wartości) oraz L dla 64-bitowych liczb całkowitych. Przedrostek ten może być pisany małą lub dużą literą w dowolnej kolejności.

Kilka z przykładów literałów całkowitych:
212         /* Poprawny zapis */
215u        /* Poprawny */
0xFeeL      /* Poprawny */
078         /* Niepoprawny zapis: 8 nie jest poprawną cyfrą systemu ósemkowego (cyfry: 0, 1, 2, 3, 4, 5, 6, 7) */
032UU       /* Niepoprawny zapis: nie można powtrzać prefiksów */
Inne przykłady różnych typów całkowitych:
85         /* dziesiętny */
0213       /* ósemkowy */
0x4b       /* szesnastkowy */
30         /* typ: int */
30u        /* niepodpisany typ int */
30l        /* typ: long */
30ul       /* niepodpisany typ long */

Literały zmiennoprzecinkowe (floating-point literals)

Literały zmiennoprzecinkowe składają się z części całkowitej, separatora dziesiętnego, części ułamkowej oraz wykładnika. Literały zmiennoprzecinkowe mogą być przedstawione w postaci dziesiętnej lub wykładniczej.

Kilka przykładów literałów zmiennoprzecinkowych
3.14159       /* Poprawny zapis  */
314159E-5L    /* Poprawny zapis  */
510E          /* Niepoprawny zapis: niekomplenty wykładnik */
210f          /* Niepoprawny zapis: brak części dziesiętnej lub wykładnika */

Podczas prezentacji liczby w postaci dziesiętnej należy dołączyć separator dziesiętny, wykładnik lub oba elementy. W prezentacji wykładniczej musi znaleźć się cześć całkowita, ułamkowa, lub obie te części. Wykładnik jest poprzedzony literą e lub E.

Literały znakowe (character literals)

Literały znakowe są ujęte w pojedyncze cudzysłowy. Dla przykładu, ‘x’ może być przechowany w prostym typie znakowym, char. Literały te mogą być przechowywane jako zwykły znak (taki jak ‘x’) lub jako sekwencja ucieczki (taka jak ‘\t’) bądź też jako znak uniwersalny (taki jak ‘\u02C0’).

W języku C# jest pewien zbiór znaków, które poprzedzone są ‘\’ - backslash. Mają one szczególne znaczenie i są używane np. jako znak nowej linii ‘\n’ lub tabulator ‘\t’.

Poniżej lista niektórych znaków sekwencji ucieczki:
Sekwencja ucieczki Znaczenie
\\ znak \
\' znak '
\" znak "
\? znak ?
\a z głośników usłyszmy pojedyczny brzęczyk (beep)
\b znak backspace (cofamy kursor o jedną pozycję)
\n nowa linia
\r powrót kursora na początek obecnej linii
\t znak tabulacji (odstęp)
\v pionowy znak tabulacji
\ooo liczba ósemkowa o jednej lub większej liczbie cyfr
\xhh liczba szestastkowa o jednej lub większej liczbie cyfr
Przykład wykorzystania kilku znaków sekwencji ucieczki:
// Sekwencje ucieczki
Console.WriteLine("Witaj\tużytkowniku\n\n");

Literały łańcuchowe (string literals)

Literały łańcuchowe zamknięte są w znakach podwójnego cudzysłowu: "" lub też @"". Literały te zawierają sekwencję znaków które są podobne do literałów znakowych: mogą to być zwykłe znaki, sekwencje ucieczki czy znaki uniwersalne.

Tak formatowany tekst można bez obaw dzielić na wiele linii używając znaków sekwencji ucieczki oraz oddzielać poszczególne części za pomocą spacji.

Poniżej kilka przykładów literałów łańcuchowych:
// Literały łancuchowe
string tekst_1 = "Witaj użytkowniku!";
string tekst_2 = "Witaj       \r użytkowniku \r";
string tekst_3 = "Witaj \t \v użytkowniku!";
Console.WriteLine(tekst_1);
Console.WriteLine(tekst_2);
Console.WriteLine(tekst_3);
Console.ReadLine();

Definiowanie stałych

Stałe definiowane są przy użyciu słowa kluczowego const. Składania definicji jest następująca:
const typ_danych nazwa_zmiennej = wartość;
Poniższy program pokazuje przykładowe działanie programu z zastosowaniem stałych:
using System;
namespace Const
{
    class Program
    {
        static void Main(string[] args)
        {
            // Definicja naszej stałej
            const double pi = 3.14159;
            double r;
            // Wyświetlenie komunikatu oraz pobranie promienia wskazanego przez użytkownika
            Console.WriteLine("Podaj promień: ");
            r = Convert.ToInt32(Console.ReadLine());
            // Dokonanie obliczeń
            double pole = pi * r * r;
            // Wyświetlenie wyników na konsoli
            Console.WriteLine("Promień: {0}, Pole: {1}", r, pole);
            Console.ReadLine();
        }
    }
}