Ի՞նչ տեսակների տիպի փոխարկումներ կան C#-ում։
sobes.tech AI
Պատասխան AI-ից
C#-ում կան երկու հիմնական տեսակի տիպափոխումներ՝
-
Բացահայտ տիպափոխում (Explicit conversion): Պահանջում է
(տիպ)օպերատորի օգտագործումը: Կիրառվում է, երբ կոմպիլյատորը չի կարող անվտանգ ավտոմատ կերպով կատարել փոխարկումը, օրինակ՝ հիմնական դասից ժառանգական կամ ավելի ճշգրիտ տիպից՝ ավելի քիչ ճշգրիտ տիպին (օրինակ,double-իցint)։ Կարող է հանգեցնել տվյալների կորուստի կամ ժամանակային սխալի (InvalidCastException):// Բացահայտ փոխարկում `double`-ից `int` double d = 123.45; int i = (int)d; // i կլինի 123 // Օբյեկտի բացահայտ փոխարկում կոնկրետ տիպին object obj = "Hello"; string s = (string)obj; // s կլինի "Hello" -
Անհայտ տիպափոխում (Implicit conversion): Ավտոմատ կատարվում է կոմպիլյատորով, երբ փոխարկումը հայտնի և անվտանգ է, այսինքն՝ տվյալների կորուստ չկա: Օրինակ՝
int-իցdouble-ին փոխարկում:// `int`-ից `double`-ին անհայտ փոխարկում int x = 10; double y = x; // y կլինի 10.0 // Դերիվատիվ դասի անհայտ փոխարկում հիմնականին class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Անհայտ փոխարկում
Բացի այդ, կան as և is օպերատորները, որոնք նույնպես վերաբերում են տիպափոխումներին, բայց իրենց առանձնահատկություններով:
-
Օպերատոր
as: Կատարում է տիպափոխում, եթե դա հնարավոր է, և վերադարձնումnull, եթե չի հաջողվում: Չգեներացնի InvalidCastException։ Օգտագործվում է միայն հղումային տիպերի և Nullable-ների համար:// `as` օպերատորի օգտագործում object obj2 = "World"; string s2 = obj2 as string; // s2 կլինի "World" object obj3 = 123; string s3 = obj3 as string; // s3 կլինի null -
Օպերատոր
is: Ստուգում է, արդյոք օբյեկտը պատկանում է որոշակի տիպին կամ նրա ժառանգներին: Վերադարձնում էtrueկամfalse: Վերջին C# տարբերակներում կարող է օգտագործվել պատկերների (pattern matching) հետ՝ միաժամանակ ստուգելու և փոխարկելու:// `is` օպերատորի օգտագործում տիպի ստուգման համար object obj4 = "Example"; if (obj4 is string) { // գործողություններ, եթե օբյեկտը տող է } // `is`-ի օգտագործում պատկերով (Pattern matching) if (obj4 is string str) { // str հասանելի է որպես տող }