5

我正在开发一个应用程序,其中方向(向前/向后)的概念非常重要。

问题是在整个代码库中散布着几种不同的约定:在某些地方它是真/假,而在其他地方则是 +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.
}

我现在想知道隐式转换是个好主意还是坏主意:

public static implicit operator DirectionClass(double sign);
public static implicit operator DirectionClass(bool forwards); //etc..

以及是否有我可能会遇到的经典陷阱。

4

2 回答 2

6

基本上,在设计标准库时,隐式转换总是一个坏主意。因为如果您突然发现隐式转换中断的情况,您将无法轻松修复它,因为有很多人依赖它。

另一方面,如果您负责整个代码库(或至少是您的团队)。只做让你的生活更简单的事情。

如果您发现一种情况会中断:

  • 你会学到一些东西(这总是很好的)
  • 你可以退后一步修复代码
于 2009-11-23T11:29:47.563 回答
4

一般来说,在这种情况下,您应该可以使用隐式转换。

隐式转换的经典问题是当人们以一种在转换过程中丢失一些信息的方式实现它时,这会导致您可以想象的整体混乱(例如,应该相等的事物不再相等,等等)。但在您的示例中并非如此。

您唯一需要注意的是,您在某种程度上丢失了一些类型检查,编译器不会提示您错误。

于 2009-11-23T11:25:31.747 回答