ტიპების გარდაქმნა

დაპროგრამების დროს, როგორც წესი, ერთი ტიპის მქონე ცვლადს შეგვიძლია მივანიჭოთ მხოლოდ ამავე ტიპის მნიშვნელობა, ე.ი. მინიჭების ოპერატორის მარცხნივ მოთავსებულ ცვლადსა და მარჯვნივ მოთავსებულ გამოსახულებას ერთნაირი ტიპები უნდა ჰქონდეს. მაგრამ, რიგ შემთხვევებში, საჭირო ხდება ერთი ტიპის ცვლადისათვის სხვა ტიპის მნიშვნელობის მინიჭება. მაგალითად, double ტიპის ცვლადს შეგვიძლია მივანიჭოთ int ტიპის ცვლადის მნიშვნელობა:
int mteli;
double wiladi;
mteli = 25;
wiladi = mteli;
თუ მინიჭების ოპერატორში გამოიყენება მონაცემთა თავსებადი ტიპები, მაშინ მინიჭების ოპერატორის მარჯვნივ მოთავსებული გამოსახულების ტიპი ავტომატურად გარდაიქმნება მარცხნივ მოთავსებული ცვლადის ტიპად. აქედან გამომდინარე, ჩვენს მაგალითში mteli ცვლადის ტიპი ჯერ გარდაიქმნება double ტიპად და შემდგომ მისი მნიშვნელობა მიენიჭება wiladi ცვლადს. რადგან C# ენაში ტიპების კონტროლი მკაცრად ხორციელდება, ამიტომ ყველა ტიპის გარდაქმნა არ არის დაშვებული. მაგალითად, არათავსებადია int და bool ტიპები.
ერთი ტიპის მქონე ცვლადისთვის სხვა ტიპის მქონე ცვლადის მნიშვნელობის მინიჭებისას ტიპის ავტომატურად გარდაქმნა შესრულდება იმ შემთხვევაში თუ:
– ორივე ტიპი თავსებადია;
– საბოლოო ტიპი (მარცხენა) მეტია საწყის ტიპზე (მარჯვენა). ეს იმას ნიშნავს, რომ საბოლოო ტიპის მქონე ცვლადის მიერ დაკავებული თანრიგების რაოდენობა მეტია საწყისი ტიპის მქონე ცვლადის მიერ დაკავებული თანრიგების რაოდენობაზე.
ამ პირობების შესრულებისას ხორციელდება გაფართოებადი გარდაქმნა. მაგალითად, int ტიპისთვის გამოყოფილი ბიტების (თანრიგების) რაოდენობა, ყოველთვის საკმარისია byte ტიპის მქონე მნიშვნელობების შესანახად, და რადგან ორივე მთელრიცხვა ტიპია, ამიტომ მათ მიმართ შესრულდება ტიპების ავტომატური გარდაქმნა.
გაფართოებადი გარდაქმნის შესასრულებლად ყველა რიცხვითი ტიპი მთელრიცხვა და მცურავწერტილიანი ტიპების ჩათვლით თავსებადი უნდა იყოს. მაგალითად, ქვემოთ მოყვანილ პროგრამაში სრულდება long ტიპის ცვლადის გარდაქმნა double ტიპის ცვლადად.

{
//
// პროგრამაში ხდება long ტიპის გარდაქმნა double ტიპად long L1;
double D1;

L1 = 100321410L; D1 = L1;
label1.Text = D1.ToString();
}

გარდაქმნა double ტიპიდან long ტიპად დაუშვებელია, რადგან ის არ არის გაფართოებადი. გარდა ამისა, ტიპების ავტომატური გარდაქმნა არ სრულდება decimal და float ცვლადებს შორის, აგრეთვე, decimal და double, char და bool, მთელი ტიპის ცვლადებსა და char, მთელი ტიპის ცვლადებსა და bool ტიპის ცვლადებს შორის.

ავტ: რომან სამხარაძე