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:创建几个派生类对象之一以响应用户的主要内容,如果未能解决你的问题,请参考以下文章