簡體   English   中英

隱式vs顯式轉換運算符最佳實踐

[英]Implicit vs explicit casting operator best practices

我最近在C#中發現了鑄造操作員。 現在我知道我可以覆蓋運算符以允許:

byte b1 = new Foo();
byte b2 = (byte) new Foo();

但是從Foo消費者的角度來看,我不知道哪個更易於理解可以進行轉換。 我特別考慮過將要/將來必須維護我的代碼的初級程序員(或者如果我幾天前看到這個,我會想到的)。

一方面隱式投射看起來有點奇怪。 它看起來像分配不同的,不兼容的類型。 並且IDE的intellisense不會告訴你有一種方法可以在沒有編譯器抱怨的情況下做到這一點。

另一方面,顯式轉換看起來像強制轉換。 好吧,這是告訴編譯器的一種方式“我知道我在做什么,不要發牢騷”。 但是,如果程序員無法訪問Foo的代碼(或者不知道C#中存在轉換運算符),那么可以執行轉換並做一些預期的事情呢?

哪種類型的鑄件在哪種情況下是首選的? 還有第三種方式嗎?

如果Foo本質上顯然是數字的,並且轉換正在擴大,那么隱式轉換對於消費者是有用的。

如果轉換正在縮小,那么運營商應該是明確的。


如果Foo不是數字(並且Foo確實不是數字),則它不應該可轉換為數字類型。

實現一些其他方法或屬性,這些方法或屬性將執行將Foo實例轉換為數字類型的操作。 該函數的名稱應該為調用者賦予語義含義,描述返回的值以及為返回它而執行的任何操作。


你不應該避免編程語言的一部分,因為讀者可能不理解。 您應該使用簡單的散文評論您的代碼,以解釋您的決定以及您制作它們的原因。 解釋如何最大限度地利用您的類型。

使用最適合您正在建模的信息系統的語言功能。 誰知道,讀者可能會學到一些東西。

我認為,第二個在你的情況下更具可讀性。 兩者之間的操作是相同的。

請注意,您還可以寫:

var b2 = (byte) new Foo();

我認為,如果考慮可讀性,那將是最好的。

怎么樣? -

  1. 你只使用一次byte
  2. 你讓“未來的程序員”知道你鑄造Foo和B2型是byte使用一次性(byte)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM