gpt4 book ai didi

database - 如何必须重写共享/构造函数 Visual Basic

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:14 24 4
gpt4 key购买 nike

我目前正在为一个大学项目使用 Visual Basic,该项目要求我们制作一个简单的数据库系统。对于我的系统,我有一个名为 Record 的基(抽象)类,它由我的数据库中的不同类型的记录继承,例如成员用户角色

我正在将我的数据保存在 csv 文件中,并且已经编写了一个 CSVHandler 类。但是,我想要一种优雅的方法来构造从 Record 派生的类的实例,其中包含来自 CSVHandler 的字符串。

这就是问题所在。我能想到的唯一方法是在从 Record 派生的每个类中创建一个 ConstrcutorShared Function。但是,Visual Basic 不允许您将 ConstructorsShared Functions 也设为 MustOverride

这是我希望编写的代码:

' Base Class
Public MustInherit Class Record
Public MustOverride Shared Function fromString(ByVal str as String) As Record
End Class

' Example Of Class Derived From Record
Public Class User
Inherits Record

Private _id As String
Private _name As String

Public Sub New(ByVal id As String, ByVal name As String)
_id = id
_name = name
End Sub

Public Overrides Shared Function fromString(ByVal str as String) As Record
Dim strs() As String = str.Split(",")
Return New User(strs(0), strs(1))
End Function
End Class

' Example Of Creating Instacnce Of User
Dim user1 = User.fromString("1671,Kappeh")

有没有办法实现这种效果?

最佳答案

让您的构造函数调用执行初始化的 Protected MustOverride 方法。

Public MustInherit Class Record

'This is required because each derived constructor must be able to implicitly invoke a parameterless
'base constructor if it doesn't explicitly invoke a base constructor with parameters.
Protected Sub New()
End Sub

Public Sub New(csv As String)
Init(csv)
End Sub

Protected MustOverride Sub Init(csv As String)

End Class

Public Class User
Inherits Record

Private Property Id As String
Private Property Name As String

'This is still required because you can use a base constructor directly to create a derived instance.
Public Sub New(csv As String)
MyBase.New(csv)
End Sub

Public Sub New(id As String, name As String)
Id = id
Name = name
End Sub

Protected Overrides Sub Init(csv As String)
'Add your type-specific implementation here.
End Sub

End Class

这个“解决方案”实际上并没有像我想的那样,因为虽然它强制您在派生类中重写 Init,但您仍然必须提供调用基类的派生构造函数调用 Init 的构造函数,但您仍然无法执行它。我认为我会把它留作答案,因为虽然它实际上并没有为您的问题提供解决方案,但它进一步说明了为什么(据我所知)没有这样的解决方案。

关于database - 如何必须重写共享/构造函数 Visual Basic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53404542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com