所以对于继承,我总是发现自己在处理最具体的类中的超长构造函数。我正在寻找可以避免此问题的范例或方法。我想过使用工厂,但如果我这样做了,我仍然必须使用工厂中的构造函数。不管这个想法如何,我能做些什么来减少构造函数参数的长度吗?
例如:
abstract class DrawableComponent : Component, ITransformable, IScalable, IDrawable, IRotatable
是一个带有构造函数的子类
DrawableComponent(string Name, int SizeX, int SizeY, int X, int Y, float Rotation) : base(Name) { ... }
现在假设我想用它做一个 child 。事情变得更加复杂和丑陋。
class TextBoxComponent : DrawableComponent, IRenderable
构造函数现在变得非常长:
public TextBoxComponent(
IDrawableUnit Background,
IDrawableUnit Text,
string Name,
int X,
int Y,
int SX,
int SY)
: base(Name, SX,SY,X,Y,0.0f)
{
this.Background = Background;
this.Foreground = Foreground;
}
总而言之,我厌倦了这样的事情:
class Blah {Blah(blah)}
class childBlah : Blah {childBlah(blah,blahs,blaha) : base (blah)}
class grandChildBlah : childBlah {grandChildBlah(blah, blahs, blaha, blaht, blauh) : base(blah,blahs,blaha) }
最佳答案
如果您的构造函数参数列表真的很长,那么您必须在一个类中有很多字段?这表明您应该考虑将这些类拆分为多个类,或者将相关字段组提取到它们自己的类型中。
例如,x 和 y 坐标字段或宽度和高度值:
private double mX;
private double mY;
private double mWidth;
private double mHeight;
实际上应该是单个点或矢量或矩形对象:
private vector mPosition;
private vector mSize;
// or
private rectangle mRegion;
另一个建议可能是减少继承,而是使用组合。代替is-a 关系,使用has-a 关系:
然后你的'blah'例子变成了这样的:
class Blah
{
Blah(int blah) { ... }
}
class ChildBlah
{
Blah mBlah;
...
ChildBlah(Blah blah, int blahs, int blaha)
{ mBlah = blah; ... }
}
class GrandChildBlah
{
ChildBlah mChildBlah;
...
GrandChildBlah(ChildBlah blah, int blaht, int blahu)
{ mChildBlah = blah; ... }
}
关于c# - 通过 OOP 继承,我如何在 'child' 类中保持较低的参数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728526/