两个相似的重载?还是一个重载调用另一个?
Two similar overloads? or one overload calling the other?
我想重载一个函数以获取不同形式的相同数据,即:
void encode(byte[,,],float)
和
void encode(Bitmap[],float)
我写了一个函数的重载,它很长(大约60行)。
我的问题是,在写第二个重载时,是应该复制第一个重载的大部分代码并做一些小改动,还是应该转换数据并调用第一个重载?
永远不要将你的代码从一个方法复制到另一个方法,这是一个很大的错误。对于重载,您应该创建一个具有最多参数的方法,而对于其他重载,则调用具有大多数参数和一些默认值的方法。
尽可能避免大量重复。
如您所言,一个重载调用另一个重载通常是一种好方法。
将共性分解为两个重载都调用的私有方法通常也很有效。如果需要允许对不同类型进行类似操作,此私有方法可以是通用的。
尽管有时重复是不可避免的,尤其是在重载基本类型时。即使在这里,看看您是否至少可以分解出一些功能,或者考虑 T4 模板。
我想重载一个函数以获取不同形式的相同数据,即:
void encode(byte[,,],float)
和
void encode(Bitmap[],float)
我写了一个函数的重载,它很长(大约60行)。
我的问题是,在写第二个重载时,是应该复制第一个重载的大部分代码并做一些小改动,还是应该转换数据并调用第一个重载?
永远不要将你的代码从一个方法复制到另一个方法,这是一个很大的错误。对于重载,您应该创建一个具有最多参数的方法,而对于其他重载,则调用具有大多数参数和一些默认值的方法。
尽可能避免大量重复。
如您所言,一个重载调用另一个重载通常是一种好方法。
将共性分解为两个重载都调用的私有方法通常也很有效。如果需要允许对不同类型进行类似操作,此私有方法可以是通用的。
尽管有时重复是不可避免的,尤其是在重载基本类型时。即使在这里,看看您是否至少可以分解出一些功能,或者考虑 T4 模板。