Приведение двух пользовательских типов в VB.NET - PullRequest
0 голосов
/ 20 июля 2010

Мне нужно привести в лучшем виде два объекта двух типов двух пользовательских классов (в 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 Ответ

1 голос
/ 20 июля 2010

Во-первых, я предполагаю строку: Dim c As pluto = CType(b, pluto) - это неправильный тип, и на самом деле оно должно быть Dim c As pluto = CType(a, pluto)?

Вы не можете привести один класс к другому, если они не связаны между собой.Возможно, вам придется объяснить, что вы пытаетесь сделать, иначе мой ответ был бы таким: почему вы создаете разные классы pluto и pippo, если они кажутся идентичными?Просто создайте один класс и создайте для него два объекта.

Если вам нужны отдельные классы, возможно, они каким-то образом связаны, и вы можете заставить pippo наследовать от pluto?Или сделайте так, чтобы они оба реализовали один и тот же интерфейс.

В общем, я бы также предположил, что, возможно, стоит перевести имена ваших классов / переменных на английский, так как это может помочь людям понять, что выпытаюсь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...