【问题标题】:Dynamic creation of class instances类实例的动态创建
【发布时间】:2015-12-17 22:19:32
【问题描述】:

有没有办法即时创建类实例并在以后引用它们?我有一个具有各种方法和属性的类,旨在保存和计算产品数据。我希望该应用程序能够处理用户需要的尽可能多的单个产品。这段代码显然不起作用,但它应该让你知道我在问什么:

For x = 1 To howEverMany

    Dim product_ & x.ToString() As New myProductClass

Next x

我很欣赏这可能不是最好的方法(我可能应该使用列表或数组来保存产品数据),但我很好奇从技术角度来看这是否可行。我正在使用 VB.Net,但欢迎使用任何 .Net 语言的答案。谢谢。

【问题讨论】:

  • 当然,这是可能的。例如,如果您将类存储在另一个 .NET 程序集中,您可以反映该程序集并实例化该类,然后引用它并在以后调用它,绝对如此。但您需要向我们提供更多信息。这些类在您现有的项目中吗?您可能希望使其更加面向对象,并有一些工厂方法来根据参数创建正确类型的类。
  • 使用数组代替product_X?
  • 谢谢。主要的是,需要的类实例的数量是可变的——用户可能需要任何数量,我需要能够在任何这些不同的类实例中调用方法和设置属性。具体来说,用户从未知数量的 Excel 文件中加载数据,我想知道在技术上是否可行(即使不理想)实例化一个表示每个工作簿中数据的类。该类已在我的项目中定义。
  • 感谢 MicroVirus,但正如我所说,这更像是“我想知道是否......?”问题大于实际问题。我已经在使用数组了 :)

标签: vb.net class object dynamic instantiation


【解决方案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

通过它的 ID 获取一个:

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

您也可以在您的列表中进行其他类似的查询。

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多