Пользовательский тип даты для двойного преобразования типа

Если у меня есть пользовательский тип даты с именем MyDate, в котором я написал операторы для неявного преобразования double и MyDate друг в друга.

Мой вопрос: есть ли способ отключить это неявное преобразование для определенного параметра метода? это хорошая идея вообще?

например

public class A {
    ...

    public void AMethod(double x, double y) {

      // do something
    }
}

Я не хочу, чтобы в конкретном случае AMethod() кто-то мог вызывать его так:

A a = new A();
a.AMethod(m, n);  // m and n are of type MyDate

2 ответа

Я не думаю, что можно отключить неявные преобразования только для выбранных методов, либо вы получите их все, либо ничего.

Сказав это, неявные преобразования должны быть реализованы только в том случае, если вы ничего не теряете во время выполнения преобразования, например, вам не важно, произошло ли преобразование или нет. Если это не так (или, по крайней мере, в одном направлении), измените неявные преобразования на явные, и ваша проблема с исчезнет. Конечно, ваш код будет более явным со всеми этими преобразованиями, но это правильно.

Это не очень хорошая идея. При создании пользовательских неявных преобразований вы должны реализовать их таким образом, чтобы они были применимы во всех возможных сценариях. Возможность отключить его в определенных сценариях затруднит чтение кода и может привести к ошибкам.

Если вы хотите иметь возможность включать и выключать преобразование, вы должны просто реализовать явное преобразование (которое затем можно применить при необходимости).

Другие вопросы по тегам