Sobes.tech
Junior

Millised on C#-s olemasolevad tüübi teisendamise viisid?

sobes.tech AI

Vastus AI-lt

C# keeles on kaks peamist tüübi teisendamise viisi: selge ja varjatud.

Varjatud (Implicit) tüübi teisendus

Toimub automaatselt, kui kompilaator on veendunud, et teisendus on ohutu ja ei põhjusta andmete kaotsiminekut. Näiteks väiksema vahemikuga tüübi teisend suuremasse.

// Implicitne teisendus int-st long-iks
int i = 100;
long l = i;

Selge (Explicit) tüübi teisendus

Nõuab koodis teisendusoperaatori ((tüüp)) ning seda kasutatakse, kui teisendus võib põhjustada andmete kaotsimineku või erandi. See on vajalik suurema vahemikuga tüübi teisendamisel väiksemasse või mitte seotud tüüpide vahel.

// Explicitne teisendus double-st int-iks
double d = 123.45;
int i = (int)d; // murdosa osa loobutakse

// Explicitne teisendus object-st string-iks
object obj = "Hello";
string s = (string)obj;

// Kasutades as ja is operaatorit
object objAs = "World";
string sAs = objAs as string; // tagastab null, kui teisendus pole võimalik
if (objAs is string) // kontrollib, kas objekt on string-tüüpi
{
    string sIs = (string)objAs;
}

Võrdlus selge teisenduse, as ja is vahel

Operatsioon Kirjeldus Viga ebaõnnestumisel
(Tüüp) väljend Selge teisendus. Nõuab täpset tüübi vastavust. InvalidCastException
väljend as Tüüp Püüab teisendada tüüpi. Toetab ainult viidatüüpe ja null-õigustatud tüüpe. null väärtus
väljend is Tüüp Kontrollib, kas väljend saab teisendada määratud tüüpi. Buleenväärtus (true/false)

Kasutaja määratletud teisendused

Arendaja saab määratleda oma selged ja varjatud teisendusoperaatorid, kasutades võtmesõnu implicit ja explicit.

// Kasutaja määratletud varjatud teisendusnäide
public class Inches
{
    public int Value { get; set; }
    public static implicit operator Millimeters(Inches i)
    {
        return new Millimeters { Value = i.Value * 25 };
    }
}

public class Millimeters
{
    public int Value { get; set; }
}

// Kasutamine
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Varjatud teisendus
// Kasutaja määratletud selge teisendusnäide
public class Kilograms
{
    public int Value { get; set; }
}

public class Pounds
{
    public int Value { get; set; }
    public static explicit operator Kilograms(Pounds p)
    {
        return new Kilograms { Value = (int)(p.Value / 2.20462) };
    }
}

// Kasutamine
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Selge teisendus