我正在创建自己的类型来表示 css 值(如像素,例如 12px )。为了能够加/减/乘/...我的类型和整数,我定义了两个隐式运算符来和来自 int。除了一件事,一切都很好。如果我写:
CssUnitBase c1 = 10;
Console.WriteLine(c1);
我得到“10”而不是“10px” - 使用到 int 的隐式转换而不是 ToString() 方法。我怎样才能防止这种情况?
我正在创建自己的类型来表示 css 值(如像素,例如 12px )。为了能够加/减/乘/...我的类型和整数,我定义了两个隐式运算符来和来自 int。除了一件事,一切都很好。如果我写:
CssUnitBase c1 = 10;
Console.WriteLine(c1);
我得到“10”而不是“10px” - 使用到 int 的隐式转换而不是 ToString() 方法。我怎样才能防止这种情况?
是的,有一个隐式转换,int
并且重载WriteLine(int)
比 更具体WriteLine(object)
,所以它会使用它。
您可以显式调用WriteLine(object)
重载:
Console.WriteLine((object)c1);
...或者你可以给ToString
自己打电话,所以这Console.WriteLine(string)
就是:
Console.WriteLine(c1.ToString());
...或者您可以删除隐式转换为int
. 它对你有多大用处?我通常不赞成这种事情的隐式转换......(当然,如果你真的想的话,你可以保留隐式转换。) int
只需覆盖其中的ToString
方法CssUnitBase
并在您想要它作为字符串时调用它。
覆盖“ToString()”方法并使用 c1.ToString()。