6

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

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

我得到“10”而不是“10px” - 使用到 int 的隐式转换而不是 ToString() 方法。我怎样才能防止这种情况?

4

3 回答 3

14

是的,有一个隐式转换,int并且重载WriteLine(int)比 更具体WriteLine(object),所以它会使用它。

您可以显式调用WriteLine(object)重载:

Console.WriteLine((object)c1);

...或者你可以给ToString自己打电话,所以这Console.WriteLine(string)就是:

Console.WriteLine(c1.ToString());

...或者您可以删除隐式转换为int. 它对你有多大用处?我通常不赞成这种事情的隐式转换......(当然,如果你真的想的话,你可以保留隐式转换。 int

于 2010-06-23T10:01:11.747 回答
1

只需覆盖其中的ToString方法CssUnitBase并在您想要它作为字符串时调用它。

于 2010-06-23T10:01:24.557 回答
1

覆盖“ToString()”方法并使用 c1.ToString()。

于 2010-06-23T09:58:58.927 回答