Иногда объект определенного класса требуется использовать в выражении, включающем в себя данные других типов. В одних случаях для этой цели оказывается пригодной перегрузка одного или более операторов, а в других случаях — обыкновенное преобразование типа класса в целевой тип. Для подобных ситуаций в C# предусмотрена специальная разновидность операторного метода, называемая
Существуют две формы операторов преобразования: явная и неявная. Ниже они представлены в общем виде:
public static explicit operator
где
Если оператор преобразования указан в неявной форме(implicit),то преобразование вызывается автоматически, например, в том случае, когда объект используется в выражении вместе со значением целевого типа. Если же оператор преобразования указан в явной форме(explicit),то преобразование вызывается в том случае, когда выполняется приведение типов. Для одних и тех же исходных и целевых типов данных нельзя указывать оператор преобразования одновременно в явной и неявной форме.
Создадим оператор преобразования специально для классаThreeD,чтобы продемонстрировать его применение. Допустим, что требуется преобразовать объект типаThreeDв целое значение, чтобы затем использовать его в целочисленном выражении. Такое преобразование требуется, в частности, для получения произведения всех трех координат объекта. С этой целью мы воспользуемся следующей неявной формой оператора преобразования.
public static implicit operator int(ThreeD opl)
{
return opl.x * opl.у * opl.z;
}
Ниже приведен пример программы, демонстрирующей применение этого оператора преобразования.
// Пример применения оператора неявного преобразования, using System;
// Класс для хранения трехмерных координат, class ThreeD {
int х, у, z; // трехмерные координаты