1

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

一些代码来说明。

这个:

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

相比:

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

与属性版本相比,我不想做隐式版本有什么原因吗?下面的代码也有效吗?

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

我确实意识到隐式转换的可能性会稍微缺乏可读性,但是这是一个只有一个其他程序员的小项目。我们只是好奇是否存在严重的缺陷会抑制我们缺少的程序的功能。

4

1 回答 1

3

绝对不要写这样的隐式转换。隐式转换保留用于从一种类型转换为另一种类型时不会丢失任何数据。从文档中:

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

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

你提到它降低了可读性,你绝对正确。在绝大多数情况下,您应该更喜欢提高可读性,而不是任何语法糖,它只是让您编写具有更少字符的代码,而不管项目大小。

于 2013-05-12T21:19:21.407 回答