Оператори за преобразуване
Понякога обект от определен клас се изисква да се използва в израз, включително съдържащи данни от други видове. В някои случаи за тази цел се оказва
Глава 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 ();