自定义隐式投射与公共财产

时间:2013-05-12 21:13:32

标签: c# properties casting

好的,我有一个顶级类,用于监视一堆不同的值,范围从值类型到引用类型。现在我的问题是为顶级类设置隐式转换而不是设置公共属性之间的区别是什么。

一些代码来说明。

此:

 public static implicit operator int(TopLevel TP)
 {
       return TP.DataLevel1.DataLevel2.DataLeverl3.Data;
 }

与:相比:

 public int DataLevel3Value
 {
      get
      {
          return this.DataLevel1.DataLevel2.DataLeverl3.Data;
      }
 }

与Property版本相比,我是否有理由不想使用Implicit版本?代码是否也有效?

 (TP == 10) == (TP.DataLevel3Value == 10) == true;

我确实意识到隐式转换可能性会导致轻微的可读性,但这是一个只有一个其他程序员的小项目。我们只是好奇是否有严重的缺点会影响我们缺少的程序的功能。

1 个答案:

答案 0 :(得分:3)

绝对不要写这样的隐式演员表。当从一种类型转换为另一种类型时,没有数据丢失时,保留隐式强制转换。来自documentation

  

implicit关键字用于声明隐式用户定义的类型转换运算符。使用它来启用用户定义类型与其他类型之间的隐式转换,如果保证转换不会导致数据丢失

在您的示例中, 会导致信息丢失。该物业显然是一个更好的方式。

您提到它会降低可读性,而您绝对正确。在绝大多数情况下,您应该倾向于提高可读性而不是任何语法糖,这只能让您编写具有较少字符的代码,而不管项目大小如何。