2015-09-21 1 views
0

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

For x = 1 To howEverMany 

    Dim product_ & x.ToString() As New myProductClass 

Next x 

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

+0

уверен, возможно. например, если у вас есть классы, хранящиеся в другой сборке .NET, вы можете отображать сборку и создавать экземпляр класса и ссылаться на него и вызывать его позже, абсолютно. но вам нужно предоставить нам больше информации. Являются ли эти классы в вашем существующем проекте? возможно, вы захотите сделать его более OO и иметь какой-либо заводский метод для создания нужного типа класса в зависимости от параметров. –

+0

Используйте массив вместо 'product_X'? – MicroVirus

+0

Спасибо. Главное, что количество экземпляров класса, которое будет необходимо, является переменной - пользователю может потребоваться любое число, и мне нужно иметь возможность вызывать методы и устанавливать свойства в любом из этих отдельных экземпляров класса. В частности, пользователь загружает данные из неизвестного количества файлов Excel, и мне интересно, насколько технически это возможно (даже если не идеально) для создания экземпляра класса, представляющего данные в каждой книге. Класс уже определен в моем проекте. – Absinthe

ответ

0

Сохраните их в 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 

Получить один это Id:

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

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

+0

Блестящий и простой, спасибо :) – Absinthe

+0

Ваш прием =) – OneFineDay