代码之家  ›  专栏  ›  技术社区  ›  kubal5003

隐式运算符和ToString()

  •  6
  • kubal5003  · 技术社区  · 16 年前

    我正在创建自己的类型来表示css值(比如像素,12px)。能够加/减/乘/。。。我的类型和整数我定义了两个隐式运算符往返于int。除了一件事。。如果我写下:

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

    我得到的是“10”而不是“10px”—隐式转换为int,而不是ToString()方法。我怎样才能防止呢?

    3 回复  |  直到 16 年前
        1
  •  14
  •   Jon Skeet    16 年前

    是的,有一个隐式转换 int WriteLine(int) WriteLine(object) ,所以它会用这个。

    你可以的 明确地 打电话给 超载:

    Console.WriteLine((object)c1);
    

    ... 或者你可以打电话来 ToString 你自己,所以 Console.WriteLine(string) 被称为:

    Console.WriteLine(c1.ToString());
    

    内景 . 它对你有多有用?我一般不赞成这种事情的隐式转换。。。(你可以保留隐式转换 内景 当然,如果你真的愿意的话。)

        2
  •  1
  •   Carra    16 年前

    重写“ToString()”方法并使用c1.ToString()。

        3
  •  1
  •   Hans Olsson    16 年前

    只要覆盖 ToString CssUnitBase 当你想把它作为一个字符串的时候就把它叫做。