Sobes.tech
Junior

Millised on C#-s tüübi teisendamise tüübid?

sobes.tech AI

Vastus AI-lt

C# kehas on kaks peamist tüüpi teisendusi:

  1. Selge teisendus (Explicit conversion): Nõuab (tüüp) operaatori kasutamist. Seda kasutatakse, kui kompilaator ei saa turvaliselt automaatselt teisendada, näiteks põhiklassist pärandatud klassi või suurema täpsusega tüübi väiksemale (näiteks double int-ks). See võib põhjustada andmekadu või viga täitmise ajal (InvalidCastException).

    // Selge `double`-i teisendus `int`-ks
    double d = 123.45;
    int i = (int)d; // i väärtus on 123
    
    // Objekti teisendus konkreetseks tüübiks
    object obj = "Hello";
    string s = (string)obj; // s väärtus on "Hello"
    
  2. Kohene teisendus (Implicit conversion): Toimub automaatselt kompilaatoriga, kui teisendus on teada ja turvaline, st andmekadu ei toimu. Näiteks int-ist double-ks teisendus.

    // `int`-ist `double`-ks kohene teisendus
    int x = 10;
    double y = x; // y väärtus on 10.0
    
    // Pärandatud klassi teisendus põhiklassiks
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Kohene teisendus
    

Lisaks on olemas operaatorid as ja is, mis samuti kuuluvad teisendusse, kuid oma omadustega:

  • Operaator as: Teeb teisenduse, kui see on võimalik, ja tagastab null, kui mitte. Ei viska InvalidCastException. Kasutatakse ainult viidatüüpide ja Nullable-tüüpide puhul.

    // `as` operaatori kasutamine
    object obj2 = "World";
    string s2 = obj2 as string; // s2 väärtus on "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 väärtus on null
    
  • Operaator is: Kontrollib, kas objekt on teatud tüüpi või selle pärand. Tagastab true või false. Viimastes C# versioonides saab seda kasutada pattern matching'uga, et korraga kontrollida ja teisendada.

    // `is` operaatori kasutamine tüübi kontrollimiseks
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Tegevused, kui objekt on string
    }
    
    // `is` pattern matching'uga
    if (obj4 is string str)
    {
        // str on siin saadaval stringina
    }