Операторы C# Implicit и ToString ()

Я создаю свой собственный тип для представления значений CSS (как пиксели, например, 12 пкс). Для сможения к add/subtract/multiply/... моего типа и ints, я определил два неявных оператора к и от интервала. Все работает отлично кроме одной вещи.. Если я пишу:

CssUnitBase c1 = 10;
Console.WriteLine(c1);

Я добираюсь "10" вместо "10 пкс" - неявное преобразование в интервал используется вместо этого ToString () метод. Как я могу предотвратить это?

6
задан kubal5003 23 June 2010 в 09:53
поделиться

3 ответа

Просто переопределите метод ToString в CssUnitBase и вызовите его, когда захотите, как строку.

1
ответ дан 8 December 2019 в 14:40
поделиться

Да, существует неявное преобразование в int , а перегрузка WriteLine (int) более конкретна, чем WriteLine (object) , поэтому она будет используйте это.

Вы можете явно вызвать перегрузку WriteLine (object) :

Console.WriteLine((object)c1);

... или сами вызвать ToString , чтобы Console.WriteLine (string) вызывается:

Console.WriteLine(c1.ToString());

... или вы можете просто удалить неявное преобразование в int . Насколько это полезно для вас? Я вообще не сторонник неявных преобразований для такого рода вещей ... (Вы, конечно, можете оставить неявное преобразование из int , если действительно хотите.)

14
ответ дан 8 December 2019 в 14:40
поделиться

Переопределите метод ToString () и используйте c1.ToString ().

1
ответ дан 8 December 2019 в 14:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: