我知道这是一个老话题,但是在我的编程过程中我总是遇到这样一个问题:如何平衡内存使用和代码大小?
这是一个例子:
我想实现一个类(在 C# 中),并且我希望构造函数接受各种不同类型的参数。所以我需要一个构造函数来接受一个 IEnumerable 对象(这包括数组、列表等),但我还需要一个构造函数来接受可变长度参数(使用params)。这两个构造函数的内部构造例程完全相同,但是为了允许变长参数,我还是需要后一个。
Foo(IEnumerable<Bar> a) {/*construction*/}
Foo(params Bar[] a) {/*the same construction like above*/}
但是,我可以使用params转换参数数组并调用另一个构造函数:
Foo(params Bar[] a) : this(new List<Bar>(a)) {/*here empty*/}
虽然使用这种方式减少了代码大小,但它引入了一个临时列表对象,因此增加了内存使用量(虽然也是临时的)。
我知道这个例子会有很多讨论,关于哪个更好。但是我想知道,你们一般会如何处理这种平衡问题。很多情况下情况会比较复杂,有时还需要考虑执行时间的平衡。
有一个原则叫做“不要重复自己”,这是否也适用于像这里的示例这样的小段代码?