TypeCasting i VB.NET

Tags:    .net

Hej jeg har et spørgsmål, jeg håber nogen kan besvare. For at illustrere problement, viser jeg først koden:

' Interface IPerson
Option Explicit
Public Interface IPerson
Property FirstName() As String

Property LastName() As String
End Interface

' Class for Person, that implements IPerson
Option Explicit
Public Class Person
Implements IPerson

Private _FirstName As String
Private _LastName As String

Public Property FirstName() As String Implements AppTester.IPerson.FirstName
Get
Return _FirstName
End Get
Set(ByVal Value As String)
_FirstName = Value
End Set
End Property

Public Property LastName() As String Implements AppTester.IPerson.LastName
Get
Return _LastName
End Get
Set(ByVal Value As String)
_LastName = Value
End Set
End Property
End Class

' Interface IMan
Option Explicit
Public Interface IMan
Inherits IPerson

Property HasChildren() As Boolean
End Interface

' Class for Man, that inherits Person class and implements IMan
Option Explicit
Public Class Man
Inherits Person
Implements IMan

Private _HasChildren As Boolean

Public Property HasChildren() As Boolean Implements AppTester.IMan.HasChildren
Get
Return _HasChildren
End Get
Set(ByVal Value As Boolean)
_HasChildren = Value
End Set
End Property
End Class

Ovenstående kode vil jeg mene er ganske selvforklarende. Problemet opstår i følgende kode, som jeg kalder fra en sub et andet sted i projektet:

Dim oPerson As IPerson
Dim oMan As IMan

oPerson = New Person()
oMan = oPerson

Det er den sidste linje kode, der kommer med en Exception. "Specified cast is not valid". Jeg forstår ikke helt hvorfor? Jeg har læst om downcasting og upcasting, men jeg er ikke stødt på en løsning endnu. Jeg håber nogen, kan komme med en forklaring på, hvorfor "oMan = oPerson" kommer med den fejl...

På forhånd tak.

Carsten



Har du proevet med
DirectCast (variable, type)

eller
Ctype (variable,type)

altsaa

Dim oPerson as Iperson = New Person()
Dom oMan as Iman = CType(oPerson, Iman)

Er ikke selv helt 100 i det- saa du faar muligvis run-time err.




Har du proevet med
DirectCast (variable, type)

eller
Ctype (variable,type)

altsaa

Dim oPerson as Iperson = New Person()
Dom oMan as Iman = CType(oPerson, Iman)

Er ikke selv helt 100 i det- saa du faar muligvis run-time err.


Hej Jens,

det har jeg forsøgt, desværre med samme resultat. Jeg har fået fortalt, at down-casting ikke er muligt i VB.NET, men jeg tvivler en smule på det

Carsten



t