C # Неявные операторы и ToString () - PullRequest
6 голосов
/ 23 июня 2010

Я создаю свой собственный тип для представления значений CSS (например, пикселей, например, 12 пикселей).Чтобы иметь возможность добавлять / вычитать / умножать / ... мой тип и целые числа, я определил два неявных оператора для и из int.Все прекрасно работает, кроме одной вещи. Если я напишу:

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

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

Ответы [ 3 ]

13 голосов
/ 23 июня 2010

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

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

Console.WriteLine((object)c1);

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

Console.WriteLine(c1.ToString());

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

1 голос
/ 23 июня 2010

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

1 голос
/ 23 июня 2010

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

...