Вопрос
В моем приложении я создаю большое количество экземпляров «маленького» класса, который просто содержит некоторые данные.
Я знаю, что создание класса (то есть вызов конструктора) является дорогостоящим. Мой вопрос: будет ли дороже, если я сделаю так, чтобы этот маленький класс наследовал от другого класса? Некоторые поля просто перейдут в суперкласс, поэтому в основном я могу просто использовать
Примечание. Этот вопрос касается производительности в .NET .
.
Пример ситуации и демонстрация вопроса
Рассмотрим 2 случая:
1. кейс состоит только из одного класса. Это оригинальный класс:
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. case состоит из 2 классов, где второй наследуется от первого. Второй класс ShapeWithHorizontalAndVerticalOffset
обеспечивает ту же функцию, что и ShapeWithOffset
в 1. case.
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
}
Мой вопрос: команда var foo = new ShapeWithOffset(20, 10, shape);
быстрее, чем
var boo = new ShapeWithHorizontalAndVerticalOffset(20, 10, shape);
?
Если бы я использовал композицию вместо наследования, это было бы ... Но как насчет наследования?