fbpx

Variabilele in limbajul de programare C#

0

Variabile

Pentru a declara o variabila trebuie sa folosim urmatoarea sintaxa:  datatype identifier;  

De exemplu: int i; .  Aceasta expresie de tip int este numita i. Compilatorul nu te va lasa sa folosesti aceasta variabila intr-o expresie, pana cand i se atribuie o valoare. Dupa ce a fost declarata, ii puteti atribui o valoare prin operatorul „=”, spre exemplu: i = 10; De asemenea puteti sa declarati variabila si sa ii atribuiti o valoare in acelasi timp: int i = 10; .

Daca vrem sa declaram si sa initializam mai multe variabile intr-o singura structura, spre exemplu int x = 10, y = 20; , tipul de data al lui y este identic cu tipul de data al lui x, in acest caz , tipul de data este int.

Pentru a declara variabile de diferite tipuri, trebuie sa le declaram separat. Nu puteti aloca tipuri diferite de date in cadrul unei declaratii cu mai multe variabile:

int x = 10;
bool y = true; // Crearea variabilelor de tip boolean (true & false)
int x = 10, bool y = true; // Acesta nu va putea fi compilat

Atentie la „//” și textul după acesta în exemplele precedente. Acestea sunt comentarii. „//” îi spune compilatorului să ignore textul care urmează în această linie deoarece este inclus pentru ca un om sa ințeleaga mai bine programul, nu face parte din programul în sine. Vom reveni asupra comentariilor mai tarziu.

 

Initializarea variabilelor

Initializarea variabila demonstreaza un accent pe siguranta C#. Pe scurt, compilatorul C # cere ca orice variabilă să fie inițializată cu o valoare inițială înainte de a vă referi la acea variabilă într-o operație. Majoritatea compilatoarelor moderne vor semnala încălcări ale acestui text ca un avertisment, dar compilatorul C#, care este totdeauna vigilent, tratează astfel de încălcări ca erori. Acest lucru vă împiedică să preluați neintenționat valorile din memorie rămase din alte programe. C# are două metode pentru a se asigura că variabilele sunt inițializate înainte de utilizare:

           ➤  Variabilele care sunt câmpuri într-o clasă sau structura, dacă nu sunt inițializate în mod explicit, sunt în mod implicit nule, atunci când ele sunt create (clasele și structurile le vom discuta intr-un alt tutorial).

           ➤  Variabilele care sunt locale unei metode trebuie inițializate în mod explicit în cod înainte de orice declarații în care valorile lor sunt utilizate. În acest caz, inițializarea nu trebuie să seîntâmple când variabila este declarată, dar compilatorul verifică toate căile posibile prin metoda și indică o eroare dacă aceasta detectează orice posibilitate de utilizare a valorii unei  variabile locale înainte de a fi inițializată.

De exemplu, nu puteți face următoarele în C#:

public static int Main()
{
    int d;
    Console.WriteLine(d); // Nu se poate! d nu a fost initializat inainte de folosire
    return 0;
}

Observați că acest fragment de cod demonstrează definirea Main() astfel încât să returneze un int în loc de void. Dacă încercați să compilați liniile precedente, veți primi acest mesaj de eroare:

Use of unassigned local variable 'd'

Luati in considerare urmatoarea afirmatie:

Something objSomething;

În C#, această linie de cod va crea doar o referință pentru un obiect, dar această referință nu se referă la orice obiect. Orice încercare de a apela o metodă sau o proprietate împotriva acestei variabile ar rezulta într-o eroare. Initializarea unui obiect de referință în C# necesită utilizarea noului cuvânt cheie. Creați o referință așa cum este prezentat în exemplul anterior și apoi îndreptați referința la un obiect folosind noul cuvânt cheie:

objSomething = new Something(); // creaza ceva pe o anumita multime

Tipul Inferentelor

Tipul inferentelor utilizează cuvântul cheie var. Sintaxa pentru declararea variabilei se modifică într-o oarecare măsură. Compilatorul „implică” ce tip de variabilă este de la care este inițializată variabila. De exemplu: int someNumber = 0;  devine: var someNumber = 0; . Chiar dacă someNumber nu este niciodată declarat ca fiind un int, compilatorul figurează acest lucru și someNumber este un int atâta timp cât este în domeniul de aplicare. Odată compilate, cele două afirmații precedente sunt egale. Iată un scurt program pentru a demonstra:

using System;
namespace DEMOPROGRAM
{
    class Program
    {
        static void Main(string[] args)
        {
            var name = "tutoriale faine";
            var age = 26;
            var isRabbit = true;
            Type nameType = name.GetType();
            Type ageType = age.GetType();
            Type isRabbitType = isRabbit.GetType();
            Console.WriteLine("name is type " + nameType.ToString());
            Console.WriteLine("age is type " + ageType.ToString());
            Console.WriteLine("isRabbit is type " + isRabbitType.ToString());
        }
    }
}

Rezultatul din acest program este următorul:

name is type System.String
age is type System.Int32
isRabbit is type System.Bool

Există câteva reguli pe care trebuie să le urmați:

             ➤  Variabila trebuie inițializată. În caz contrar, compilatorul nu are nimic din care să deducă tipul.

             ➤  Initializatorul nu poate fi nul.

             ➤  Initializatorul trebuie sa fie o expresie.

             ➤  Nu puteți seta inițializatorul la un obiect decât dacă creați un obiect nou în inițializator.

După ce variabila a fost declarată și tipul dedus, tipul variabilei nu poate fi modificat. Cand este stabilit, tipul variabilei respectă toate regulile  pe care trebuie să le urmeze orice alt tip de variabilă.

 

Domeniul variabilelor

Domeniul de aplicare al unei variabile este regiunea codului din care poate fi accesată variabila. În general, domeniul de aplicare este determinat de următoarele reguli:

           ➤  Un câmp (cunoscut și ca o variabilă membru) al unei clase este în sfera de aplicare atât timp cât clasa sa conține domeniul de aplicare.

           ➤  O variabilă locală se află în domeniul de aplicare până când indică sfârșitul instrucțiunii în care a fost declarată.

           ➤  O variabilă locală declarată într-o declarație for, while sau o afirmație similară este în sfera de aplicare în corpul acelei bucle.

Sfera de concentrare pentru variabilele locale

Este comun într-un program mare să se utilizeze același nume de variabilă pentru variabile diferite în diferite părți ale programului. Acest lucru este bun atâta timp cât variabilele sunt incluse în diferite părți ale programului, astfel încât nu există nicio posibilitate de ambiguitate. Cu toate acestea, rețineți că variabilele locale cu același nume nu pot fi declarate de două ori în același domeniu de aplicare. De exemplu, nu puteți face acest lucru:

int x = 20;
// inca o data
int x = 30;

Luați în considerare următorul exemplu de cod:

using System;
namespace Wrox.ProCSharp.Basics
{
    public class ScopeTest
    {
        public static int Main()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            } // i nu mai este aici.
            // declar inca o variabila i , deoarece 
            // nu există altă variabilă cu acest nume în domeniul de aplicare
            for (int i = 9; i >= 0; i—-)
            {
                Console.WriteLine(i);
            } // i nu mai este aici.
            return 0;
        }
    }
}

Acest cod imprimă pur și simplu numerele de la 0 la 9 și apoi înapoi din nou de la 9 la 0, folosind două bucle for. Important este să notați variabila i de două ori în acest cod, în cadrul aceleiași metode. Puteți face acest lucru pentru că i este declarat în două bucle separate, astfel încât fiecare variabilă i este locală la propria buclă. Iată un alt exemplu:

public static int Main()
{
    int j = 20;
    for (int i = 0; i < 10; i++)
    {
        int j = 30; // Nu se poate face pentru ca j este inca in domeniul de aplicare
        Console.WriteLine(j + i);
    }
    return 0;
}

Dacă încercați să compilați acest lucru, veți primi o eroare cum ar fi:

ScopeTest.cs(12,15): error CS0136: A local variable named 'j' cannot be declared in
this scope because it would give a different meaning to 'j', which is already used
in a 'parent or current' scope to denote something else.

Aceasta se întâmplă deoarece variabila j, care este definită înainte de începerea ciclului for, este încă în domeniul de aplicare în cadrul buclei for și nu va ieși din domeniu până când metoda Main () nu va fi executată. Deși al doilea j (cea ilegală) se află în sfera de acoperire a buclei, acel domeniu de aplicare este în cadrul metodei metodei Main (). Compilatorul nu are nici o modalitate de a face distincția între aceste două variabile, deci nu va permite ca cel de-al doilea să fie declarat.

 

Domeniile de concentrare pentru câmpuri și variabilele locale

În anumite circumstanțe, totuși, puteți distinge două identificatoare cu același nume (deși nu același nume complet calificat) și același domeniu de aplicare, iar în acest caz compilatorul vă permite să declarați a doua variabilă. Aceasta deoarece C# face o distincție fundamentală între variabilele care sunt declarate la nivel de tip (câmpuri) și variabile care sunt declarate în cadrul metodelor (variabile locale). Luați în considerare următorul fragment de cod:

using System;
namespace Wrox
{
    class ScopeTest2
    {
        static int j = 20;
        public static void Main()
        {
            int j = 30;
            Console.WriteLine(j);
            return;
        }
    }
}

Acest cod se va compila chiar dacă aveți două variabile numite j în domeniul de aplicare în cadrul metodei Main (): j care a fost definit la nivelul clasei și nu iese din domeniul de aplicare până când clasa nu este distrusă (atunci când Metoda principală () se termină și programul se termină); și j definit în Main (). În acest caz, noua variabila numită j pe care o declarați în metoda Main () ascunde variabila de nivel de clasă cu același nume, astfel încât atunci când executați acest cod, numărul 30 este afișat. Ce se întâmplă dacă doriți să vă referiți la variabila de nivel de clasă? De fapt, vă puteți referi la câmpurile unei clase sau structuri în afara obiectului, utilizând sintaxa object.fieldname. În exemplul anterior, accesați un static (veți afla ce înseamnă acest lucru în secțiunea următoare) dintr-o metodă statică, astfel încât să nu puteți utiliza o instanță de clasa; folosiți doar numele clasei în sine:

..
    public static void Main()
    {
        int j = 30;
        Console.WriteLine(j);
        Console.WriteLine(ScopeTest2.j);
    }
..

Dacă accesați un câmp de instanță (un câmp care aparține unei instanțe specifice clasei), veți avea nevoie să utilizați în schimb acest cuvânt cheie.

 

Constante

După cum sugerează și numele, o constantă este o variabilă a cărei valoare nu poate fi schimbată pe întreaga sa durată „de viata”. Prefixarea unei variabile se realizeaza cu cuvântul cheie const atunci când este declarată și inițializată desemnează acea variabilă ca o constanta:

const int a = 100; // Valoarea nu poate fi modificata

Constantele au următoarele caracteristici:

           ➤  Acestea trebuie inițializate atunci când sunt declarate; și după ce o valoare a fost atribuită, nu poate fi niciodată suprascrisă.

           ➤  Valoarea unei constante trebuie să fie calculată la momentul compilării. Prin urmare, nu puteți inițializa o constantă cu o valoare luată dintr-o variabilă. Dacă trebuie să faceți acest lucru, trebuie să utilizați un câmp numai pentru citire.

           ➤  Constantele sunt întotdeauna implicit statice. Cu toate acestea, observați că nu trebuie să (și, de fapt, nu este permis) includem static în declarația constantă.

Există cel puțin trei avantaje pentru utilizarea constantelor în programele voastre:

           ➤  Constantele fac programele voastre mai ușor de citit, înlocuind numerele magice și șirurile cu litere ,nume ale căror valori sunt ușor de înțeles.

           ➤  Constantele fac ca programele voastre să fie mai ușor de modificat. De exemplu, presupuneți că aveți un SalesTax constantă într-unul din programele C#, iar acelei constante i se atribuie o valoare de 6%. Dacă se modifică ulterior rata impozitului pe vânzări, puteți modifica comportamentul tuturor calculelor fiscale pur și simplu prin atribuirea unei noi valori constantei; nu trebuie să vânați codul pentru valoarea .06 și schimbați pe fiecare, sperând că veți găsi toate acestea.

           ➤  Constantele ajută la prevenirea greșelilor din programele voastre. Dacă încercați să atribuiți o altă valoare constantă undeva în programul tău, altul decât în ​​punctul unde este declarată constanta, compilatorul va semnala eroarea.

 

Tipuri de date predefinite

Acum că ați văzut cum să declarați variabilele și constantele, să examinăm mai atent tipurile de date disponibile în C#. După ati vazut, C# este mult mai strict în ceea ce privește tipurile disponibile și definițiile acestora decât alte limbaje de programare.

 

Tabele cu valori

  Name    CTS Type   Description    Range (min:max)
sbyte System.SByte 8-bit signed integer -128:127
short System.Int16 16-bit signed integer -32,768:32,767
int System.Int32 32-bit signed integer -2,147,483,648:2,147,483,647
long System.Int64 64-bit signed integer -9,223,372,036,854,775,808:
9,223,372,036,854,775,807
byte System.Byte 8-bit unsigned integer 0:255
ushort System.UInt16 16-bit unsigned integer 0:65,535
uint System.UInt32 32-bit unsigned integer 0:4,294,967,295
ulong System.UInt64 64-bit unsigned integer 0:18,446,744,073,709,551,615

 

    Name     CTS Type    Description   Signifiant Figures    Range (Approximate)
float System.Single 32-bit, single-precision
floating point
7 ±1.5 × 10^245 to ±3.4 × 10^38
double System.Double 64-bit, double-precision
floating point
15/16 ±5.0 × 10^2324 to ±1.7 × 10^308

 

   Name     CTS Type         Description   Signifiant Figures   Range (Approximate)
decimal System.Decimal 128-bit, high-precision
decimal notation
28 ±1.0 × 10^228 to ± 7.9 × 10^28

 

 Name CTS Type Description Signifiant Figures Range (Approximate)
bool System.Boolean Represents true or false NA true or false

 

 Name CTS Type Values
char System.Char Represents a single 16-bit (Unicode) character

 

Escape Sequence Character
\’ Single quotation mark
\” Double quotation mark
\\ Backslash
\0 Null
\a Alert
\b Backspace
\f Form feed
\n Newline
\r Carriage return
\t Tab character
\v Vertical tab

 

Name CTS Type Description
object System.Object The root type. All other types (including value types) in the CTS are derived from object.
string System.String Unicode character string
Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More