Сваки израз даје неку вредност чији тип зависи од типова чланова израза. Када су у неком изразу сви чланови истог типа, тада је и вредност израза тог типа.
На пример:
Врло често смо у ситуацији да изводимо аритметичке операције над подацима различитог типа (int, float), па је неопходно податке превести у одговарајући облик. Такође, додела вредности променљивој може се извршити само ако је вредност истог типа као променљива или се може превести у одговарајући тип.
Превођење података из једног у други тип може се у програмском језику С# вршити аутоматски (имплицитна конверзија) или под контролом програмера (експлицитна конверзија).
Разликујемо две ситуације у којима се примењује имплицитна конверзија:
• при израчунавању вредности израза компајлер аутоматски усклађује типове података који се користе у изразу, уколико је то могуће
• при додељивању вредности променљивој, вредност се аутоматски конвертује у тип променљиве уколико је то могуће
Основна идеја имплицитне конверзије је да се не губе информације и да се сачува прецизност података. Постоје правила конверзије по којима компајлер аутоматски извршава имплицитну конверзију.
Имплицитна конверзија се најчешће примењује код нумеричких типова података.
Променљива типа А, чији скуп могућих вредности је подскуп скупа могућих вредности типа Б, може се имплицитно конвертовати у тип Б.
Слика 5.5. Приказ имплицитне конверзије ужег у шири тип (int у long, float, double или decimal) |
Слика 5.6. Табела дозвољених имплицитних конверзија |
Пример 1. Израчунати вредност променљиве b након извршавања следећих наредби:
//Deklarisanje i inicijalizacija promenljive b
double b = 12.45;
//Deklarisanje promenljive x
int x = 10;
//Promenljivoj b dodeljujemo njenu vrednost uvecanu za vrednost x
b = b + x;
При рачунању вредности израза b+x долази до имплицитне конверзије податка x у тип double јер су променљиве b (double) и x (int) различитог типа. Дакле, након конверзије је x = 10.0, па је нова вредност променљиве b = 12.45 + 10.0 = 22.45
Пример 2. Израчунати вредности променљивих a, c, d након извршавања следећих наредби.
//Deklarisanje i inicijalizacija promenljivih
int x = 15, y = 4, a;
double c, d, z = 15.0;
//Promenljivoj a dodeljujemo vrednost izraza x / y
a = x / y;
//Promenljivoj c dodeljujemo vrednost izraza x / y
c = x / y;
//Promenljivoj d dodeljujemo vrednost izraza z / y
d = z / y;
Пошто су променљиве x и y истог типа (int), вредност израза x / y је такође int (3), па је вредност променљиве a = 3,а вредност променљиве c = 3.00 (при додели целобројне вредности реалној променљивој долази до имплицитне конверзије).
При израчунавању вредности израза z / y долази до имплицитне конверзије променљиве y у тип double, јер је променљива z типа double, а променљива yтипа int, па је резултат израза 3.75.
Променљива d је типа double, па је њена вредност једнака вредности израза d = 3.75.
Користи се код оних конверзија које се не могу имплицитно извршити. Експлицитном конверзијом програмер, додатним кодом, од компајлера захтева тражену конверзију.
Експлицитна конверзија се остварује коришћењем оператора cast или коришћењем класе Convert .
Оператор cast користимо тако што у заградама наведемо тип у који желимо да конвертујемо вредност израза који следи за оператором cast:
(тип) променљива
Слика 5.7. Табела дозвољених експлицитних конверзија |
//Deklarisanje promenljive a
int a;
//Deklarisanje i inicijalizacija promenljive b
double b = 12.78;
//Promenljivoj a dodeljujemo vrednost promenljive b
a = b;
Слика 5.8. Листа грешака које се јављају при извршавању наредби |
a = (int)b; |
//Deklarisanje promenljive a
int a;
//Deklarisanje i inicijalizacija promenljive b
double b = 12.78;
//Promenljivoj a dodeljujemo vrednost promenljive b koja je eksplicitno konvertovana u int
a =(int) b;
Пример 3. Одредити вредности променљиве x након извршавања наредби:
//Deklarisanje i inicijalizacija promenljivih a i b
int a = 11, b = 4;
//Deklarisanje promenljivih x i y
double x, y;
//Promenljivoj x dodeljujemo vrednost izraza a / b
x = a / b;
//Promenljivoj y dodeljujemo vrednost izraza (double)a / b
y = (double)a / b;
//Deklarisanje i inicijalizacija promenljive x
int x = 212;
//Promenljivu x tipa int konvertujemo u tip string
//operatorom cast i dodeljujemo tu vrednost promenljivoj s tipa string
string s = (string)x;
//Deklarisanje i inicijalizacija promenljive x
string p = ”123”;
//Promenljivu p tipa string konvertujemo u tip int
//operatorom cast i dodeljujemo tu vrednost promenljivoj y tipa int
int y = (int)p;
Слика 5.9. Листа грешака које се јављају при извршавању наредби |
//Deklarisanje i inicijalizacija promenljive x
int x = 212;
//Promenljivu x tipa int konvertujemo u tip string
//metodom Convert.ToString() i dodeljujemo tu vrednost promenljivoj s tipa string
string s = Сonvert.ToString(x);
//Deklarisanje i inicijalizacija promenljive p
string p = ”123”;
//Promenljivu p tipa string konvertujemo u tip int
//metodom Convert.ToInt32() i dodeljujemo tu vrednost promenljivoj y tipa int
int y = Сonvert.ToInt32(p);
string s = х.ToString(); |