Sobes.tech
Junior

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

sobes.tech AI

Atbilde no AI

C# valodā ir divi galvenie tipu pārveidošanas veidi: skaidrs un nemanāms.

Nemanāms (Implicit) tipu pārveidojums

Notiek automātiski, kad kompilators ir pārliecināts, ka pārveidojums ir drošs un nesniegs datu zudumu. Piemēram, no mazāka diapazona tipa uz lielāku.

// Nemanāms pārveidojums no int uz long
int i = 100;
long l = i;

Skaidrs (Explicit) tipu pārveidojums

Prasa norādīt pārveidošanas operatoru ((tips)) kodā un tiek izmantots, kad pārveidojums var novest pie datu zuduma vai izņēmuma. Tas ir nepieciešams, pārveidojot no lielāka diapazona tipa uz mazāku vai starp nesasaistītiem tipiem.

// Skaidrs pārveidojums no double uz int
double d = 123.45;
int i = (int)d; // daļiņa tiek atmesta

// Skaidrs pārveidojums no object uz string
object obj = "Hello";
string s = (string)obj;

// Izmantojot as un is operatorus
object objAs = "World";
string sAs = objAs as string; // atgriež null, ja pārveidojums nav iespējams
if (objAs is string) // pārbauda, vai objekts ir string tips
{
    string sIs = (string)objAs;
}

Salīdzinājums starp skaidru pārveidojumu, as un is

Operācija Apraksts Kļūda neveiksmes gadījumā
(Tips) izteiksme Skaidrs pārveidojums. Prasa precīzu tipa atbilstību. InvalidCastException
izteiksme as Tips Mēģina pārveidot tipu. Darbojas tikai ar atsauces tipiem un null-ļaujamiem tipiem. atgriež null
izteiksme is Tips Pārbauda, vai izteiksme var tikt pārveidota uz norādīto tipu. Boolea vērtība (true/false)

Lietotāja definēti pārveidojumi

Izstrādātājs var definēt savus skaidrus un nemanāmos pārveidošanas operatorus, izmantojot implicit un explicit atslēgvārdus.

// Lietotāja definēts nemanāms pārveidojums
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; }
}

// Lietošana
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Nemanāms pārveidojums
// Lietotāja definēts skaidrs pārveidojums
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) };
    }
}

// Lietošana
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Skaidrs pārveidojums