Sobes.tech
Junior

Ի՞նչ տեսակների տիպի փոխարկումներ կան C#-ում։

sobes.tech AI

Պատասխան AI-ից

C#-ում կան երկու հիմնական տեսակի տիպափոխումներ՝

  1. Բացահայտ տիպափոխում (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"
    
  2. Անհայտ տիպափոխում (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 հասանելի է որպես տող
    }