好的,这可能是非常主观的,但它来了:
我们假设我正在编写一种方法,该方法将采用屏幕某些区域的打印屏幕。您更喜欢哪种方法签名?为什么?
为什么?
我一直看到自己反复实施1)和2)(将其中一个重定向到另一个)但我最终通常只使用其中一个,所以两者都没有意义。我无法决定哪个更好。也许我应该使用我打算制作printcreen的方法看起来最多的签名?
答案 0 :(得分:13)
这取决于。如果这是一般用途的库,请务必添加所有三个。 .NET框架,特别是GDI +,充满了这方面的例子。如果转换是微不足道的,那就不费吹灰之力了,您的用户将会感激不尽。
如果它只是一个内部类,我会选择最容易从呼叫站点使用的选项。例如,如果调用者已有Rectangle
可用,则Rectangle
重载更好。如果有多个具有不同首选项的呼叫站点,则最好添加多个重载。
答案 1 :(得分:4)
Rectangle
最能描述函数的行为(至少我希望它能做到!)X& Y与宽度和宽度相关联高度以便定义一个矩形;它们不是任意无关的变量。
答案 2 :(得分:3)
我会选择2)
Bitmap DoPrintScreen(Rectangle rect);
正如mark所说,参数可以在下面交换:
Bitmap DoPrintScreen(int x, int y, int width, int height);
我不会选择这个,因为它不像其他人读它那样明确。虽然没有人认为有人不明白2)
Bitmap DoPrintScreen(Point point, Size size);
当然,这只是我的观点!!!
答案 3 :(得分:3)
如果你最终只是调用其中一个重载,那么让其他两个坐在一起真的没有意义。除了必须筛选某些方法的27个重载之外,我没有什么比这更讨厌了,希望a)我找到了适合我目的的那个,并且b)写这个混乱的人实际上跑了并测试了我正在使用的重载甚至一次
在屏幕捕获方法的特定情况下,带有Rectangle
参数的重载可能是最方便的,因为表单总是有一个与之关联的矩形。此外,如果您需要重复抓取相同的屏幕区域,则保存一个变量(Rectangle
)比四个(x,y,宽度和高度)更容易。
答案 4 :(得分:2)
我个人会包括其中的三个,让用户选择她/他更喜欢使用哪一个,所有这些都为用户提供了最大的使用自由。没有人喜欢被戴上手铐。好吧,不是编程! ;)
答案 5 :(得分:2)
最好的是
Bitmap DoPrintScreen(Rectangle screenArea);
如果你认为方法参数是“概念”的一部分,在这种情况下是屏幕区域的概念,那么其他选项就不能很好地抽象出这个概念。
另外,为参数使用一个好的名称,因为它可能通过在C#4.0中使用命名参数来调用代码more clear。
答案 6 :(得分:1)
Rectangle
可能是最明确的,因为论证不依赖于位置。用户很容易意外地交换x
和y
或width
和height
。
Point
/ Size
也比x-y-width-height更好,有时额外的显式性可以更清晰一些。
但最终,没有充分理由不使用所有三个重载。
答案 7 :(得分:1)
我认为您应该选择最适合其他方法的版本,这些方法将与您的代码一起使用。我指的是来自其他标准或常见的第三方库的.Net方法和方法。通过这种方式,代码看起来是统一的,并且相同的对象可以直接传递给其他方法。
答案 8 :(得分:1)
如果方便消费者,我会提供全部3。毕竟,您的实际实现将(或应该)仅存在于一个地方。所有其他重载方法都将简单地提取适当的参数,并使用实际代码将它们传递给本地方法。
...所以这对您的用户来说很方便,您几乎没有任何努力。赢/赢。
答案 9 :(得分:0)
两者--1和2。 还有一个没有参数的全屏=)
有时你将x,y,宽度,高度分开, 有时你已经有了矩形。 瓦里安3 - 恕我直言是非常罕见=) 但是用户总是可以将值转换为矩形,或者将矩形拆分为值) 我认为这是一个哲学问题。
所以要全部或随机选择一个)))
答案 10 :(得分:0)
所有3.就像你说的那样,你要将它们重定向到2,所以为什么不保留这三个呢?我认为您应该将Rectangle参数名称更改为更有意义的名称 - 例如printArea。
欢呼声。