在VB.NET中转换两种自定义类型

时间:2010-07-20 10:22:26

标签: vb.net oop casting types

我需要以更好的方式投射两种类型的两个自定义类的两个对象(在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)

对于更复杂的类,如果有转换函数可能会更容易。

1 个答案:

答案 0 :(得分:1)

首先,我假设这一行:Dim c As pluto = CType(b, pluto)是错误的,实际上应该是Dim c As pluto = CType(a, pluto)

除非相关,否则您不能将一个类强制转换为另一个类。您可能需要解释您要尝试做什么,否则我的答案是,如果它们看起来相同,为什么要创建不同的类plutopippo?只需创建一个类并创建它的两个对象。

如果你确实需要单独的课程,也许它们在某种程度上是相关的,你可以让pippo继承自pluto?或者让它们都实现相同的界面。

总的来说,我还建议将您的班级/变量名称翻译成英语可能是值得的,因为这可能会让人们更容易理解您要做的事情。