Koje vrste konverzije tipova postoje u C#?
sobes.tech АИ
Одговор од АИ
У C# постоје две главне врсте кастинга:
-
Јавни кастинг (Explicit conversion): Захтева коришћење оператора кастинга
(тип). Користи се када компајлер не може безбедно аутоматски извршити преобразбу, на пример, када се кастује са основне класе на деривату или са типа веће прецизности на мању (нпр.doubleуint). Може довести до губитка података или грешке током извршавања (InvalidCastException).// Јавни кастинг double у int double d = 123.45; int i = (int)d; // i ће бити 123 // Јавни кастинг објекта у конкретан тип object obj = "Hello"; string s = (string)obj; // s ће бити "Hello" -
Непосредни кастинг (Implicit conversion): Аутоматски се извршава од стране компајлера када је преобразба позната и безбедна, односно без губитка података. На пример, када се кастује од
intуdouble.// Непосредни кастинг int у double int x = 10; double y = x; // y ће бити 10.0 // Непосредни кастинг деривате класе у основну class Base {} class Derived : Base {} Derived derivedObj = new Derived(); Base baseObj = derivedObj; // Непосредни кастинг
Поред тога, постоје оператори as и is, који такође припадају кастингу, али са својим особеностима:
-
Оператор
as: Извршава кастинг ако је могућ, и враћаnullако није. Не генерише изузетак InvalidCastException. Користи се само за референтне типове и типове који дозвољавају Nullable.// Коришћење оператора as object obj2 = "World"; string s2 = obj2 as string; // s2 ће бити "World" object obj3 = 123; string s3 = obj3 as string; // s3 ће бити null -
Оператор
is: Проверава да ли је објекат инстанца одређеног типа или његовог деривата. Враћаtrueилиfalse. У најновијим верзијама C# може се користити са шаблонима (pattern matching) за истовремену проверу и кастинг.// Коришћење оператора is за проверу типа object obj4 = "Example"; if (obj4 is string) { // Акције ако је објекат стринг } // Коришћење is са шаблоном (Pattern matching) if (obj4 is string str) { // str је доступан као стринг овде }