2013-05-12 49 views
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; 

我的確意識到了隱式轉換可能導致一個小缺乏可讀性然而,這是一個小項目,只和其他程序員。我們只是很好奇,如果有嚴重的缺陷,會抑制我們失蹤的程序的功能。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-05-12 21:15:39

+0

對不起,甚至沒有意識到 – Nomad101 2013-05-12 21:16:21

+0

該代碼是一個有效的布爾表達式,應該評估爲「真」。最後的'== true'雖然是多餘的。 – Blorgbeard 2013-05-12 21:16:35

回答

3

肯定不要寫這樣的隱式轉換。當從一種類型轉換爲另一種類型時,隱式轉換保留用於不會丟失數據的情況。來自documentation

隱式關鍵字用於聲明隱式的用戶定義類型轉換運算符。如果保證轉換不會導致數據丟失,則可以使用它來啓用用戶定義類型與另一種類型之間的隱式轉換,

在你的例子中,它確實導致信息丟失。該物業顯然是更好的方式去。

你提到它降低了可讀性,而且你絕對正確。在絕大多數情況下,您應該傾向於提高可讀性,而不是使用任何語法糖,這樣只會讓您用較少的字符編寫代碼,而不考慮項目大小。

+0

我是在這樣的假設下,即基於特定演員陣容的信息丟失,ala從一個引用類型到另一個引用類型,而不是從引用類型到值類型。這適用於兩者?在這種情況下,我相信你已經回答了這個問題。 – Nomad101 2013-05-12 21:21:03

+0

好的,謝謝我會盡我所能發佈這個答案,我們只是在尋求澄清,而且都是有道理的。 – Nomad101 2013-05-12 21:24:29

+0

@ Nomad101你正在從一個複雜的引用類型轉換爲'int',所以當然你在這裏丟失信息。在實踐中,你幾乎從不*需要寫一個隱式轉換。 – 2013-05-12 21:25:55