Sobes.tech
Junior

Дар C# кадом намудҳои табдил додани намудҳо мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Дар C# існують два основних типи приведення:

  1. Явне приведення (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"
    
  2. Неявне приведення (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 доступна тут як рядок
    }