vb.net - 是否可以将一个对象的实例化限制为 VB.NET 中的另一个(父)对象?

标签 vb.net object instantiation restriction

VB 2008.NET 3.5

假设我们有两个类,Order 和 OrderItem,它们代表某种类型的在线订购系统。 OrderItem 表示订单中的单个订单项。一个 Order 可以包含多个 OrderItem,以 List(of OrderItem) 的形式。

Public Class Order
    Public Property MyOrderItems() as List(of OrderItem)
    End Property
End Class

OrderItem 在没有 Order 的情况下不应该存在,这是有道理的。换句话说,一个 OrderItem 类不应该能够被自己实例化,它应该依赖于一个 Order 类来包含它并实例化它。但是,OrderItem 在范围内应该是公共(public)的,以便其他对象可以访问它的属性。因此,OrderItem 的要求是:

  1. 只能由Order类实例化。

  2. 必须是公共(public)的,这样任何其他对象都可以通过 Order 对象访问它的属性/方法。例如Order.OrderItem(0).ProductID.

  3. OrderItem 应该能够传递给将对其进行操作的其他子/函数。

我怎样才能实现这些目标?有没有更好的方法?

最佳答案

您可以创建一个 OrderItem 的构造函数,它接受一个 Order 项目。

在此构造函数中,您可以将 OrderItem 添加到 Order.MyOrderItems 集合中。

这将满足您的要求。

Public Class OrderItem
    Public Sub New(ByRef myOrder As Order)
        myOrder.MyOrderItems.Add(Me)
    End Sub
End Class
  1. 您只能通过向其传递有效的 Order 对象来实例化 OrderItem
  2. 仍然是公开的,可以根据需要调用(Order.OrderItem(0).ProductID)。
  3. OrderItem 可以传递给其他子程序和函数。

关于vb.net - 是否可以将一个对象的实例化限制为 VB.NET 中的另一个(父)对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722986/

相关文章:

vb.net - 能够将参数传递给没有参数的函数

asp.net - 在 EPPlus 中格式化列以使用电话号码格式

Java String 对象的相等性和引用

Swift - 即使在检查对象是否存在后仍然打印 "Optional"- 我如何解包

Javascript 使用变量继承构造函数

java - 用spring注入(inject)匿名类

C# 相当于 "Not MyEnum.SomeValue"

vb.net - 默认表单实例何时创建?

instantiation - 从 Haxe 中的字符串名称创建类的实例

java - 类型转换通用列表