Domeniul de vizibilitate (contextul) variabilelor și constantelor
Fiecare variabilă este accesibilă în cadrul unui anumit context sau domeniu de vizibilitate. În afara acestui context, variabila nu mai există.
Există diverse contexte:
- Contextul clasei. Variabilele definite la nivelul clasei sunt accesibile în orice metodă a acestei clase. Acestea sunt numite și variabile globale sau câmpuri
- Contextul metodei. Variabilele definite la nivelul metodei sunt locale și sunt accesibile doar în cadrul metodei respective. În alte metode, acestea nu sunt accesibile
- Contextul blocului de cod. Variabilele definite la nivelul blocului de cod sunt de asemenea locale și sunt accesibile doar în cadrul blocului respectiv. În afara blocului de cod, acestea nu sunt accesibile
De exemplu, să presupunem că codul programului este definit astfel:
Person tom = new();
tom.PrintName();
tom.PrintSurname();
class Person // începutul contextului clasei
{
string type = "Person"; // variabilă la nivelul clasei
public void PrintName() // începutul contextului metodei PrintName
{
string name = "Tom"; // variabilă la nivelul metodei
{ // începutul contextului blocului de cod
string shortName = "Tomas"; // variabilă la nivelul blocului de cod
Console.WriteLine(type); // în bloc este accesibilă variabila clasei
Console.WriteLine(name); // în bloc este accesibilă variabila metodei înconjurătoare
Console.WriteLine(shortName); // în bloc este accesibilă variabila blocului respectiv
} // sfârșitul contextului blocului de cod, variabila shortName este distrusă
Console.WriteLine(type); // în metodă este accesibilă variabila clasei
Console.WriteLine(name); // în metodă este accesibilă variabila metodei respective
//Console.WriteLine(shortName); // așa nu se poate, variabila shortName este definită în blocul de cod
//Console.WriteLine(surname); // așa nu se poate, variabila surname este definită în altă metodă
} // sfârșitul contextului metodei PrintName, variabila name este distrusă
public void PrintSurname() // începutul contextului metodei PrintSurname
{
string surname = "Smith"; // variabilă la nivelul metodei
Console.WriteLine(type); // în metodă este accesibilă variabila clasei
Console.WriteLine(surname); // în metodă este accesibilă variabila metodei respective
} // sfârșitul contextului metodei PrintSurname, variabila surname este distrusă
} // sfârșitul contextului clasei, variabila type este distrusă
Aici sunt definite patru variabile: type, name, shortName și surname. Fiecare dintre ele există în contextul său. Variabila type există în contextul întregii clase Person și este accesibilă în orice loc și bloc de cod din metodele PrintName și PrintSurname.
Variabila name există doar în cadrul metodei PrintName. La fel cum variabila surname există în cadrul metodei PrintSurname. În metoda PrintName nu putem accesa variabila surname, deoarece aceasta este în alt context.
Variabila shortName există doar în blocul de cod delimitat de acoladele deschise și închise. În afara acestor limite, variabila shortName nu există și nu poate fi accesată.
Adesea, limitele diverselor contexte pot fi asociate cu acoladele deschise și închise, ca în acest caz, care stabilesc limitele unui bloc de cod, metodă, clasă.
La lucrul cu variabile trebuie de avut în vedere că variabilele locale, definite într-o metodă sau într-un bloc de cod, ascund variabilele la nivel de clasă dacă numele lor coincid:
class Person
{
string name = "Tom"; // variabilă la nivelul clasei
public void PrintName()
{
string name = "Tomas"; // variabilă la nivelul metodei ascunde variabila la nivelul clasei
Console.WriteLine(name); // Tomas
}
}
La declararea variabilelor trebuie avut în vedere că într-un context nu se pot defini mai multe variabile cu același nume.