我正在开发一个应用程序,其中Direction(前进/后退)的概念非常重要.
问题是在整个代码库中传播有几种不同的约定:在某些地方它是真/假,在其他地方是+ 1/-1.
为了尝试将这些结合在一起,我创建了:
public class DirectionClass
{
public bool Forwards { get; set; }
public double Sign { get; set; }
public EDirection { get; set; }
//plus associated constructor overloads, implementing IEquatable, etc.
}
Run Code Online (Sandbox Code Playgroud)
我现在想知道隐式转换是好还是坏:
public static implicit operator DirectionClass(double sign);
public static implicit operator DirectionClass(bool forwards); //etc..
Run Code Online (Sandbox Code Playgroud)
以及是否有可能包含的经典陷阱.
基本上,在设计标准库时,隐式转换总是一个坏主意.因为如果你突然发现隐式转换中断的情况,你就无法轻易修复它,因为很多人依赖它.
另一方面,如果您负责整个代码库(或至少是您的团队).只是为了让你的生活更简单.
如果你发现一个它破裂的情况:
一般来说,在这种情况下,您应该可以接受隐式转换。
隐式转换的经典问题是,当人们以在转换过程中丢失一些信息的方式实现它时,这会导致你可以想象的整体混乱(例如,应该相等的东西不再相等,等等)。但在你的例子中情况并非如此。
您唯一需要小心的是,您在某种程度上丢失了一些类型检查,编译器不会提示您错误。
| 归档时间: |
|
| 查看次数: |
768 次 |
| 最近记录: |