• 07/06/2020
  • 5 minute de citit

In acest articol

Deoarece C # este tipat static la momentul compilarii, dupa ce o variabila este declarata, nu poate fi declarata din nou sau nu i se poate atribui o valoare de alt tip decat daca acel tip este implicit convertibil la tipul variabilei. De exemplu, sirul nu poate fi convertit implicit in int. Prin urmare, dupa ce declarati i ca int, nu ii puteti atribui sirul „Buna ziua”, asa cum arata urmatorul cod:

int i; // eroare CS0029: Nu se poate converti implicit tipul ‘string’ in ‘int’ i = “Buna ziua”;

Cu toate acestea, s-ar putea sa trebuiasca uneori sa copiati o valoare intr-o variabila sau parametru de metoda de alt tip. De exemplu, este posibil sa aveti o variabila intreaga pe care trebuie sa o treceti la o metoda al carei parametru este tastat ca dublu. Sau poate fi necesar sa atribuiti o variabila de clasa unei variabile de tip interfata. Aceste tipuri de operatii se numesc conversii de tip . In C #, puteti efectua urmatoarele tipuri de conversii:

  • Conversii implicite : nu este necesara o sintaxa speciala, deoarece conversia are intotdeauna succes si nu se vor pierde date. Exemplele includ conversii de la tipuri integrale mai mici la mai mari si conversii de la clase derivate la clase de baza.

  • Conversii explicite (distributii) : conversiile explicite necesita o expresie de distribuire. Distribuirea este necesara atunci cand informatiile ar putea fi pierdute in conversie sau cand conversia ar putea sa nu reuseasca din alte motive. Exemplele tipice includ conversia numerica intr-un tip care are o precizie mai mica sau un interval mai mic si conversia unei instante din clasa de baza intr-o clasa derivata.

  • Conversii definite de utilizator: conversiile definite de utilizator sunt efectuate prin metode speciale pe care le puteti defini pentru a permite conversii explicite si implicite intre tipurile personalizate care nu au o relatie de clasa de baza-clasa derivata. Pentru mai multe informatii, consultati Operatori de conversie definite de utilizator.

  • Conversii cu clase de ajutor : pentru a face conversii intre tipuri necompatibile, cum ar fi numere intregi si obiecte System.DateTime sau siruri hexadecimale si tablouri de octeti, puteti utiliza clasa System.BitConverter, clasa System.Convert si metodele Parse ale tipuri numerice incorporate, cum ar fi Int32.Parse. Pentru mai multe informatii, consultati Cum sa convertiti o matrice de octeti intr-un int, Cum sa convertiti un sir intr-un numar si Cum sa convertiti intre siruri hexazecimale si tipuri numerice.

Conversii implicite

Pentru tipurile numerice incorporate, se poate face o conversie implicita atunci cand valoarea care trebuie stocata se potriveste variabilei fara a fi trunchiata sau rotunjita. Pentru tipurile integrale, aceasta inseamna ca intervalul tipului sursa este un subset adecvat al intervalului pentru tipul tinta. De exemplu, o variabila de tip long (intreg pe 64 de biti) poate stoca orice valoare pe care o poate stoca un int (intreg pe 32 de biti). In exemplul urmator, compilatorul converteste implicit valoarea num din dreapta intr-un tip cu mult inainte de a-l atribui bigNum.

// Conversie implicita. O lunga // poate detine orice valoare pe care o poate detine un int si multe altele! int num = 2147483647; long bigNum = num;

Pentru o lista completa a tuturor conversiilor numerice implicite, consultati sectiunea Conversii numerice implicite din articolul Conversii numerice incorporate.

Pentru tipurile de referinta, exista intotdeauna o conversie implicita dintr-o clasa in oricare dintre clasele sau interfetele sale de baza directe sau indirecte. Nu este necesara o sintaxa speciala, deoarece o clasa derivata contine intotdeauna toti membrii unei clase de baza.

Derivat d = nou Derivat (); // Intotdeauna OK. Baza b = d;

Conversii explicite

Cu toate acestea, daca o conversie nu poate fi facuta fara riscul de a pierde informatii, compilatorul necesita efectuarea unei conversii explicite, care se numeste cast . O distributie este o modalitate de a informa in mod explicit compilatorul ca intentionati sa efectuati conversia si ca sunteti constient de faptul ca s-ar putea produce pierderi de date sau ca distributia poate esua in timpul rularii. Pentru a efectua o distributie, specificati tipul la care faceti casting intre paranteze in fata valorii sau variabilei de convertit. Urmatorul program arunca o dubla la un int. Programul nu se va compila fara distributie.

clasa Test {static void Main () {double x = 1234,7; int a; // Aruncati dublu la int. a = (int) x; System.Console.WriteLine (a); }} // Iesire: 1234

Pentru o lista completa a conversiilor numerice explicite acceptate, consultati sectiunea Conversii numerice explicite din articolul Conversii numerice incorporate.

Pentru tipurile de referinta, este necesara o distributie explicita daca trebuie sa convertiti dintr-un tip de baza intr-un tip derivat:

// Creati un nou tip derivat. Girafa g = Girafa noua (); // Conversia implicita la tipul de baza este sigura. Animal a = g; // Este necesara o conversie explicita pentru a reveni // la tipul derivat. Nota: Aceasta va compila, dar va // arunca o exceptie in timpul rularii daca // obiectul din partea dreapta nu este de fapt o girafa. Giraffe g2 = (Giraffe) a;

O operatie de distributie intre tipurile de referinta nu modifica tipul de executie al obiectului de baza; modifica doar tipul valorii utilizate ca referinta la acel obiect. Pentru mai multe informatii, consultati Polimorfism.

Tastati exceptiile de conversie in timpul rularii

In some reference type conversions, the compiler cannot determine whether a cast will be valid. It is possible for a cast operation that compiles correctly to fail at run time. As shown in the following example, a type cast that fails at run time will cause an InvalidCastException to be thrown.

clasa Animal {public void Eat () => System.Console.WriteLine (“Eating.”); public override string ToString () => “Sunt un animal.”; } clasa Reptile: Animal {} clasa Mammal: Animal {} clasa UnSafeCast {static void Main () {Test (mamifer nou ()); // Pastrati fereastra consolei deschisa in modul de depanare. System.Console.WriteLine („Apasati orice tasta pentru a iesi.”); System.Console.ReadKey (); } static void Test (Animal a) {// System.InvalidCastException in timpul rularii // Nu se poate arunca obiectul de tip „Mammal” pentru a tasta „Reptile” Reptile r = (Reptile) a; }}

The Test method has an Animal parameter, thus explicitly casting the argument a to a Reptile makes a dangerous assumption. It is safer to not make assumptions, but rather check the type. C# provides the is operator to enable you to test for compatibility before actually performing a cast. For more information, see How to safely cast using pattern matching and the as and is operators.

C# language specification

For more information, see the Conversions section of the C# language specification.

See also

  • C# Programming Guide
  • Types
  • Cast expression
  • User-defined conversion operators
  • Generalized Type Conversion
  • How to convert a string to a number

sextape italia video streaming xxx
mary la vedova video valeria borghese
porno barletta video valeria curtis
www.clubgemma.com video veronica le bon
emanuelle porn video xxx malena
joanna bujoli xxx videocentopercento
andrea dipre video hard videocentoxcento
casting italian porno videos cento x cento
valentina nappi primo porno videos centoxcento
centoxcento ita videos porno mario salieri
valentina nappi nurse videos salieri
porn streaming free vinny star
malena scopata da rocco viola porn
porno giovani porche violetta porn
streaming film centoxcento violetta xxx
centoxcwnto vip culo
film porno marito e moglie vip italiani porno
andrea di prè porno vip porche
succhiarsi il cazzo vip senza mutande video
video valeria borghese vip troie