Оператори за преобразуване

Понякога обект от определен клас се изисква да се използва в израз, включително­ съдържащи данни от други видове. В някои случаи за тази цел се оказва

Глава 9. Претоварване на оператора 293

подходящо претоварване на един или повече оператори, а в други случаи - обикновено­ омагьосано преобразуване на типа клас в целевия тип. За ситуации като тази в C #, преди­ има специален вид операторски метод, наречен преобразуващ оператор. Такъв оператор преобразува обект от оригиналния клас в друг тип. Операторите за преобразуване помагат за пълна интеграция на типове класове в програмната среда на C #, което ви позволява свободно да използвате класове заедно с други типове данни, при условие че е определен редът на преобразуване в тези типове.

Има две форми на оператори за преобразуване: явна и неявна. Те са представени по-долу в общи линии:

публичен статичен експлицитен оператор target_type (source_type v)

публичен статичен неявен оператор target_type (source_type v)

където target_type обозначава типа, към който се извършва преобразуването; е­ go_type е типът, който се преобразува; стойност - специфичната стойност, придобита от класа след трансформация. Връщане на оператори за преобразуване­ изпращайте данни, които имат target_type и не е разрешено да се посочват други типове данни за връщане.

Ако операторът за преобразуване е посочен в неявна форма, тогава преобразуването­ Извикването се извиква автоматично, например, когато обект се използва в израз заедно със стойност на целевия тип. Ако операторът за преобразуване е посочен изрично, тогава преобразуването се извиква, когато се извърши глас. За едни и същи типове данни източник и цел не можете да задавате оператора за преобразуване едновременно в явна и неявна форма.

Нека създадем оператор за преобразуване специално за клас ThreeD за обработка­ следете приложението му. Да предположим, че искате да конвертирате обект от тип ThreeD в целочислена стойност, така че да можете да го използвате в цяло число израз. Подобно преобразуване се изисква, по-специално, за да се получи произведението на трите координати на обекта. За тази цел ще използваме следната имплицитна форма на ope­ трансформатор ратор.

публичен статичен имплицитен оператор int (ThreeD op1)

връщане op1.x * op1.y * op1.z;

По-долу има примерна програма, която демонстрира приложението на тази опера­ трансформация на тора.

// Пример за използване на оператора на неявно преобразуване.

// Клас за съхранение на 3D координати.

int x, y, z; // 3D координати

публичен ThreeD (int i, int j, int k)

// Претоварване на двоичен оператор +.

публичен статичен ThreeD оператор + (ThreeD op1, ThreeD op2)

294 Част I. C # Език

Резултат от ThreeD = нов ThreeD);

резултат.x = op1.x + op2.x; резултат.y = op1.y + op2.y; резултат.z = op1.z + op2.z;

// Неявно преобразуване на обект от тип ThreeD в тип int. публичен статичен имплицитен оператор int (ThreeD op1)

връщане op1.x * op1.y * op1.z;

// Показване на координати X, Y, Z. публично празно Покажи ()

Console.WriteLine (x + "," + y + "," + z);

ThreeD a = нов ThreeD (1, 2, 3); ThreeD b = нов ThreeD (10, 10, 10); ThreeD c = нов ThreeD ();