Дар C# кадом намудҳои табдил додани намудҳо мавҷуданд?
sobes.tech AI
Ҷавоб аз AI
Дар 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 доступна тут як рядок }