В целом , я бы сказал, даже если бы бокс был медленнее (до некоторой степени незаметным), это правильный путь. Reflection - это инструмент для облегчения некоторого рода метапрограммирования - когда вам нужно поработать над самим кодом, а не для упрощения бизнес-логики ваших приложений, и, следовательно, вы не должны использовать его без веской причины. Программист должен сначала думать из физической области. Тем не менее, в вашем случае это, вероятно, не имеет значения, поскольку вы уже идете мета-путем Я думаю . Использование object
все еще дает вам безопасность времени компиляции в определенной степени и лучшее обслуживание .
Как уже говорили другие, здесь отражение медленнее (если только вы не кэшируете). Еще одна вещь, которая приходит в пользу бокса, это то, что вы, скорее всего, в любом случае будете боксировать, имея дело с отражением . API отражения всегда имеет дело с object
, поэтому, если вы получаете какое-то значение экземпляра, вы должны распаковать его. Точно так же, вызов GetType
для экземпляра типа значения сначала устанавливает его в object
, что может потребоваться, если у вас нет аргумента типа, а только экземпляр.
Но лучшая альтернатива - полагаться на дженерики. Некоторые хорошие образцы подробно описаны здесь .