VB.net:创建几个派生类对象之一以响应用户

Posted

技术标签:

【中文标题】VB.net:创建几个派生类对象之一以响应用户【英文标题】:VB.net: Creating one of several derived class objects in response to User 【发布时间】:2018-10-15 15:02:48 【问题描述】:

这似乎应该是一个非常容易回答的问题,但我似乎找不到任何明显的方法。

我有一个对象的基类,它有几个派生类,这里是 ClassA 和 Class B。我想从用户那里获取输入并创建一个类型由他们的响应确定的对象。

但我不能只在 Select Case 中放置一个 Dim 语句,因为块作用域会立即终止该对象。

我想要的是类似

Select Case Input Case 1 Dim OutputObject as New ClassA() Case 2 Dim OutputObject as New ClassB() End Select

我一直觉得有一些明显的方法可以做到这一点,毕竟它对于多态性的整个概念来说似乎相当重要,但我似乎无法想到它。

【问题讨论】:

返回一个基类的对象,分别设置为A类或B类的构造。 查看WebRequest.Create 方法,了解您正在尝试执行的操作的示例。它的返回类型是WebRequest,但实际返回的对象是基于传入 URL 协议的派生类型。由调用者将该结果转换为适当的类型。 根据您正在执行的操作的详细信息,使用Interface 作为返回值而不是基类可能更有意义。 我肯定会研究界面的想法——我以前从未真正听说过它们,它们可能对我非常有用。由于 VB.net 不支持多重继承。 【参考方案1】:

这称为Factory Method。它看起来更像这样

Dim OutputObject as BaseClass

Select Case Input
Case 1
    OutputObject = New ClassA()
Case 2
    OutputObject = New ClassB()
End Select

返回基类的位置。

【讨论】:

我最初将我的 BaseClass 作为 MustInherit 但我删除了它,这非常有效!尽管我不得不添加更多的保护性代码来防止无意中使用基类。谢谢 @EdmundIreland 这可能是使用 Interface 的原因。实现接口的 BaseClass,这个工厂方法将返回接口。

以上是关于VB.net:创建几个派生类对象之一以响应用户的主要内容,如果未能解决你的问题,请参考以下文章

面向对象:继承派生

将基类转换为派生类[重复]

面向对象-继承与派生

简单工厂模式

面向对象设计思想之一(构造器和继承)

面向对象之继承与派生