簡體   English   中英

您更喜歡哪種方法簽名?為什么?

[英]Which kind of method signature do you prefer and why?

好吧,這可能是非常主觀的,但它來了:

讓我們假設我正在編寫一種方法,它將采用屏幕某些區域的打印屏幕。 您更喜歡哪種方法簽名?為什么?

  1. 位圖DoPrintScreen(int x,int y,int width,int height);
  2. 位圖DoPrintScreen(Rectangle rect);
  3. 位圖DoPrintScreen(點,大小);
  4. 其他

為什么?

我一直看到自己反復實施1)和2)(將其中一個重定向到另一個)但我最終通常只使用其中一個,所以兩者都沒有意義。 我無法決定哪個更好。 也許我應該使用我將要調用的方法看起來最多的簽名來制作版畫屏幕?

這取決於。 如果這是一般用途的庫,請務必添加所有三個。 .NET框架,特別是GDI +,充滿了這方面的例子。 如果轉換是微不足道的,那就不費吹灰之力了,您的用戶會感激不盡。

如果它只是一個內部類,我會選擇最容易從調用站點使用的選項。 例如,如果主叫方已經有一個Rectangle可用, Rectangle超載更好。 如果有多個具有不同首選項的呼叫站點,則最好添加多個重載。

Rectangle最能描述函數的行為(至少我希望它能做到!)X&Y與寬度和高度相關聯,以便定義一個矩形; 它們不是任意無關的變量。

我會去2)

Bitmap DoPrintScreen(Rectangle rect); 

正如mark所說,參數可以在下面交換:

Bitmap DoPrintScreen(int x, int y, int width, int height); 

我不會選擇這個,因為它不像其他人閱讀它那樣明確。 雖然沒有任何歧義的人閱讀2)

Bitmap DoPrintScreen(Point point, Size size);

當然那只是我的觀點當然!

如果你最終只是調用其中一個重載,那么讓其他兩個坐在一起真的沒有意義。 除了必須篩選某些方法的27個重載之外,我沒有什么比這更討厭了,希望a)我找到了適合我目的的那個,並且b)寫這個混亂的人實際上跑了並測試了我正在使用的重載甚至一次。

在屏幕捕獲方法的特定情況下,使用Rectangle參數的重載可能是最方便的,因為表單始終具有與之關聯的矩形。 此外,如果需要重復抓取相同的屏幕區域,則保存一個變量( Rectangle )比四個(x,y,寬度和高度)更容易。

我個人會包括其中的三個,讓用戶選擇她/他更喜歡使用哪一個,所有這些都為用戶提供了最大的使用自由。 沒有人喜歡被戴上手銬。 好吧,不是編程! ;)

最好的是

Bitmap DoPrintScreen(Rectangle screenArea);

如果你認為方法參數是“概念”的一部分,在這種情況下是屏幕區域的概念,那么其他選項就不能很好地抽象出這個概念。

此外,為參數使用一個好名稱,因為它可能通過在C#4.0中使用命名參數使調用代碼更加清晰

Rectangle可能是最清晰的,因為參數不依賴於位置。 用戶容易意外地交換xywidthheight

Point / Size也優於xy-width-height,有時額外的顯式可以更清晰一些。

但最終,沒有充分的理由使用所有三個重載。

我認為你應該選擇最適合其他方法的版本,這些方法將與你的代碼一起使用。 我指的是來自其他標准或常見的第三方庫的.Net方法和方法。 以這種方式,代碼看起來是統一的,並且相同的對象可以直接傳遞給其他方法。

如果方便消費者,我會提供所有3個。 畢竟,您的實際實現將(或應該)僅存在於一個地方。 所有其他重載方法都將簡單地提取適當的參數,並使用實際代碼將它們傳遞給本地方法。

...所以這對您的用戶來說很方便,您幾乎不需要付出任何努力。 贏/贏。

- 1和2.還有一個沒有參數全屏=)

有時你已經分開了x,y,寬度,高度,有時你已經有了矩形。 瓦里安3 - 恕我直言是非常罕見=)但用戶總是可以將值轉換為矩形,或將矩形分解為值)我認為這是哲學問題。

所以,讓他們全部或隨機選擇一個)))

所有3.就像你說的那樣,你要將它們重定向到2,所以為什么不保留這三個? 我認為您應該將Rectangle參數名稱更改為更有意義的名稱 - 例如printArea。

干杯。

暫無
暫無

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

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