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 Тип |
кӯшиш мекунад, ки намудро табдил диҳад. танҳо барои намудҳои истинодӣ ва намудҳое, ки 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; // Табдил додани равшан