我需要以更好的方式投射两种类型的两个自定义类的两个对象(在VB.Net中):
代码:
Public Class pluto
Public Sub New(ByVal campoPippoPass As String)
_campoPippo = campoPippoPass
End Sub
Private _campoPippo As String = ""
Public Property campoPippo() As String
Get
Return Me._campoPippo
End Get
Set(ByVal value As String)
If Not Object.Equals(Me._campoPippo, value) Then
Me._campoPippo = value
End If
End Set
End Property
End Class
Public Class pippo
Public Sub New(ByVal campoPippoPass As String)
_campoPippo = campoPippoPass
End Sub
Private _campoPippo As String = ""
Public Property campoPippo() As String
Get
Return Me._campoPippo
End Get
Set(ByVal value As String)
If Not Object.Equals(Me._campoPippo, value) Then
Me._campoPippo = value
End If
End Set
End Property
End Class
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a As New pippo("ciao")
' here I have the error 'invalid cast'
Dim c As pluto = CType(a, pluto)
MsgBox(c.campoPippo)
End Sub
如何将“c”转换为“a”类型的对象?还有其他方法而不是写下面的内容吗?
Dim c As New pluto(a.campoPippo)
对于更复杂的类,如果有转换函数可能会更容易。
答案 0 :(得分:1)
首先,我假设这一行:Dim c As pluto = CType(b, pluto)
是错误的,实际上应该是Dim c As pluto = CType(a, pluto)
?
除非相关,否则您不能将一个类强制转换为另一个类。您可能需要解释您要尝试做什么,否则我的答案是,如果它们看起来相同,为什么要创建不同的类pluto
和pippo
?只需创建一个类并创建它的两个对象。
如果你确实需要单独的课程,也许它们在某种程度上是相关的,你可以让pippo
继承自pluto
?或者让它们都实现相同的界面。
总的来说,我还建议将您的班级/变量名称翻译成英语可能是值得的,因为这可能会让人们更容易理解您要做的事情。