2011-09-22 4 views
1

Я сохранение кода кто-то еще и у них есть этот раздел в методе:Любые причины для этого вызова Activator.CreateInstance?

object ReportCriteriaInstance = 
     Activator.CreateInstance(
       typeof(MyCompany.Utils.ReportStructure.ReportSearchCriteria)); 

//ReportCriteria is passed in as a method parameter 
ReportCriteriaInstance = ReportCriteria; 

Я не знаю, почему они установки ReportCriteriaInstace другой значение одной линии после инстанцирования его CreateInstance().

Кроме того, , потому что мы проходим в известном типе до CreateInstance (MyCompany.Utils.ReportStructure.ReportSearchCriteria), есть ли причина не использовать new() вместо этого? Какой-то по умолчанию, безразмерный конструктор, по которому я не получу, может быть?

+0

Единственная причина, я могу думать, если сборка загружается динамически и, таким образом, вы не имеете имя во время компиляции. – kenny

+2

Поместите // перед этой линией и продолжайте свою жизнь. Когда-нибудь вы поймете, почему. –

+0

@Hans Passant: Это не сэкономить до тех пор, пока не будет доказано –

ответ

2

Это похоже на заброшенное усилие для реализации контейнера DI для бедных людей. Позже объект был просто передан, поэтому код можно безопасно удалить (если не существует конструктор по умолчанию ReportSearchCriteria, который имеет некоторые потенциальные побочные эффекты).

+0

Похоже, что есть побочный эффект в классе ReportSearchCriteria –

1

Вы можете легко конвертировать код в дальнейшем, во избежание побочных эффектов рефакторинга полностью:

var ReportSearchCriteriaInstance = new MyCompany.Utils.ReportStructure.ReportSearchCriteria(); 
object ReportCriteriaInstance = ReportCriteria; 
Смежные вопросы