Frage
In meiner Anwendung erstelle ich eine große Anzahl von Instanzen der "kleinen" Klasse, die nur einige Daten enthalten.
Ich weiß, dass die Erstellung einer Klasse (d. h. der Aufruf eines Konstruktors) kostspielig ist. Meine Frage ist: Wird es kostspieliger sein, wenn ich diese kleine Klasse von einer anderen Klasse erben lasse? Einige Felder werden einfach in die Superklasse verschoben, also kann ich im Grunde nur
Hinweis: Diese Frage bezieht sich speziell auf die Leistung in .NET .
Beispielsituation und Demonstration der Frage
Betrachten Sie diese 2 Fälle:
1. Fall besteht nur aus einer Klasse. Es ist die ursprüngliche Klasse:
public class ShapeWithOffset{
public double XOffset { get; private set; }
public double YOffset { get; private set; }
public IShape Shape{ get; private set; }
public ShapeWithOffset(double xOffset, double yOffset, IShape shape){
//check if arguments are correct/throw ArgumentException if not
XOffset = xOffset;
YOffset = yOffset;
Shape = shape;
}
//equality members
}
2. Fall besteht aus 2 Klassen, wobei die zweite von der ersten erbt. Zweite Klasse ShapeWithHorizontalAndVerticalOffset
bietet die gleiche Funktion wie ShapeWithOffset
im 1. Fall.
public class ShapeWithHorizontalOffset{
public double XOffset { get; private set; }
public IShape Shape { get; private set; }
public ShapeWithHorizontalOffset(double xOffset, IShape shape){
//check if arguments are correct/throw ArgumentException if not
XOffset = xOffset;
Shape = shape;
}
//equality members
}
public class ShapeWithHorizontalAndVerticalOffset : ShapeWithHorizontalOffset{
public double YOffset { get; private set; }
public ShapeWithHorizontalAndVerticalOffset(double xOffset, double yOffset,
IShape shape) : base(xOffset, shape){
//check if yOffset is correct/throw ArgumentOutOfRangeException if not
Yffset = yOffset;
}
//equality members
}
Meine Frage ist: Ist der Befehl var foo = new ShapeWithOffset(20, 10, shape);
schneller als
var boo = new ShapeWithHorizontalAndVerticalOffset(20, 10, shape);
?
Wenn ich Komposition anstelle von Vererbung verwenden würde, wäre es... Aber was ist mit der Vererbung?