Sobes.tech
Junior

C# да кандай түрдөгү түрлөр бар?

sobes.tech AI

AIден жооп

C# тилинде эки негизги түр өткөрүү түрү бар: ачык жана жашырын.

Жашырын (Implicit) түр өткөрүү

Автоматтык түрдө болот, компилятор өткөрүүнүн коопсуз экенине ишенсе жана маалымат жоготууга алып келбесе. Мисалы, кичүү диапазондуу түрдөн чоңураак диапазондуу түргө.

// intтен longго жашырын өткөрүү
int i = 100;
long l = i;

Ачык (Explicit) түр өткөрүү

Коддо өткөрүү операторун ((тип)) көрсөтүүнү талап кылат жана өткөрүү маалымат жоготууга алып келиши мүмкүн же исключение чыгарышы мүмкүн. Бул чоң диапазондуу түрдөн кичүү диапазондуу түргө же байланышы жок түрлөр арасында керек.

// doubleден intке ачык өткөрүү
double d = 123.45;
int i = (int)d; // бөлүкчө бөлүгү четке кагылат

// objectтен stringке ачык өткөрүү
object obj = "Hello";
string s = (string)obj;

// as жана is операторлору менен өткөрүү
object objAs = "World";
string sAs = objAs as string; // эгер өткөрүү мүмкүн эмес болсо null кайтарат
if (objAs is string) // объекттин string түрүндө экенин текшерет
{
    string sIs = (string)objAs;
}

Ачык өткөрүүнүн, as жана is салыштыруу

Операция Түшүндүрмө Ката кайтаруу учурлары
(Тип) израз Ачык өткөрүү. Туура түрдүн так дал келиши талап кылынат. InvalidCastException
израз as Тип Түрдү өткөрүүгө аракет кылат. only for ссылкалык түрлөр жана null кабыл алгыч түрлөр үчүн иштейт. null кайтарат
израз is Тип Изразды белгилүү түргө өткөрө аламбы деп текшерет. Булев мааниси (true/false)

Колдонуучу аныкталган өткөрүүлөр

Дамытучы өзүнүн ачык жана жашырын операторлорун аныктай алат, implicit жана explicit ачкыч сөздөрүн колдонуп.

// Колдонуучу аныктаган жашырын өткөрүү мисалы
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; }
}

// Колдонуучу колдонуу
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Жашырын өткөрүү
// Колдонуучу аныктаган ачык өткөрүү мисалы
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) };
    }
}

// Колдонуучу колдонуу
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Ачык өткөрүү