Динамическое создание экземпляров класса

Есть ли способ создавать экземпляры классов на лету и ссылаться на них позже? У меня есть класс с различными методами и свойствами, предназначенными для хранения и вычисления данных о продукте. Я бы хотел, чтобы приложение могло обрабатывать столько отдельных продуктов, сколько нужно пользователю. Этот код явно не будет работать, но он должен дать вам представление о том, что я прошу:

For x = 1 To howEverMany

    Dim product_ & x.ToString() As New myProductClass

Next x

Я понимаю, что это может быть не лучший подход (вероятно, мне следует использовать списки или массивы для хранения данных о продукте), но мне любопытно, возможно ли это с технической точки зрения. Я использую VB.Net, но ответы на любом языке .Net приветствуются. Спасибо.


person Absinthe    schedule 21.09.2015    source источник
comment
конечно, это возможно. например, если у вас есть классы, хранящиеся в другой сборке .NET, вы можете отразить сборку и создать экземпляр класса, ссылаться на него и вызывать его позже, абсолютно. но вы должны дать нам больше информации. Есть ли эти классы в вашем существующем проекте? возможно, вы захотите сделать его более OO и иметь какой-то фабричный метод для создания правильного типа класса в зависимости от параметров.   -  person Ahmed ilyas    schedule 21.09.2015
comment
Использовать массив вместо product_X?   -  person MicroVirus    schedule 21.09.2015
comment
Спасибо. Главное, чтобы количество необходимых экземпляров класса было переменным — пользователю может потребоваться любое количество, и мне нужно иметь возможность вызывать методы и устанавливать свойства в любом из этих отдельных экземпляров класса. В частности, пользователь загружает данные из неизвестного количества файлов Excel, и мне интересно, возможно ли технически (даже если это не идеально) создать экземпляр класса, представляющего данные в каждой книге. Класс уже определен в моем проекте.   -  person Absinthe    schedule 21.09.2015
comment
Спасибо, MicroVirus, но, как я уже сказал, это скорее интересно, если...? вопрос, чем реальная проблема. Я уже использую массивы :)   -  person Absinthe    schedule 21.09.2015


Ответы (1)


Сохраните их в файле List(Of T). Затем вы можете LINQ один или несколько объектов в списке.

'class level
Private Products As New List(Of myProductClass)

'place where you load them
For x As Integer = 1 To howEverMany
  Dim myc As New myProductClass
  mpc.Id = x
  'set other properties as needed
  Products.Add(mpc)
Next

Получить один по его идентификатору:

Dim mpc4 = (From p In Products Where p.Id = 4).FirstOrDefault
If Not mpc4 Is Nothing Then
  'object exists
End If

Вы также можете делать другие подобные запросы в своем списке.

person OneFineDay    schedule 21.09.2015