Sobes.tech
Junior

Kādi ir C# tipa pārvēršanas veidi?

sobes.tech AI

Atbilde no AI

C# ir šajā valodā ir divi galvenie tipu pārvēršanas veidi:

  1. Izteikta pārvēršana (Explicit conversion): Prasa (tips) operatora izmantošanu. To izmanto, kad kompilators nevar droši veikt pārvēršanu automātiski, piemēram, no pamata klases uz atvasināto vai no lielākas precizitātes tipa uz mazāku (piemēram, double uz int). Tas var novest pie datu zuduma vai kļūdas izpildes laikā (InvalidCastException).

    // Izteikta `double` uz `int` pārvēršana
    double d = 123.45;
    int i = (int)d; // i būs 123
    
    // Objekta pārvēršana uz konkrētu tipu
    object obj = "Hello";
    string s = (string)obj; // s būs "Hello"
    
  2. Netieša pārvēršana (Implicit conversion): Automātiski tiek veikta kompilatorā, kad pārvēršana ir zināma un droša, tas ir, bez datu zuduma. Piemēram, no int uz double.

    // `int` uz `double` netieša pārvēršana
    int x = 10;
    double y = x; // y būs 10.0
    
    // Nozīmīga klases pārvēršana uz bāzes klasi
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Netieša pārvēršana
    

Turklāt ir operatori as un is, kas arī attiecas uz tipu pārvēršanu, bet ar savām īpatnībām:

  • Operators as: Veic tipu pārvēršanu, ja tas ir iespējams, un atgriež null, ja neizdodas. Neizraisa InvalidCastException. To izmanto tikai atsauces tipiem un Nullable tipiem.

    // `as` operatora izmantošana
    object obj2 = "World";
    string s2 = obj2 as string; // s2 būs "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 būs null
    
  • Operators is: Pārbauda, vai objekts ir noteikta tipa vai tā atvasināta. Atgriež true vai false. Jaunākajās C# versijās to var izmantot ar pattern matching, lai vienlaikus pārbaudītu un pārvērstu.

    // `is` operatora izmantošana tipa pārbaudei
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Darbības, ja objekts ir virknes tips
    }
    
    // `is` ar pattern matching
    if (obj4 is string str)
    {
        // str ir pieejams kā virknes tips
    }