In Visual Basic is het probleem van typeconversie ontstaan vanaf de eerste versies van de taal en werd het bijzonder relevant met de opkomst van strikte typisering en meervoudige klassehiërarchieën in .NET.
De belangrijkste taak is om een veilige en expliciete conversie tussen compatibele datatypen te waarborgen, rekening houdend met runtime en de mogelijkheid van fouten.
De oplossing — VB.NET heeft sleuteloperatoren voor conversie: CType, DirectCast, TryCast.
CType voert conversie uit tussen elk compatibel type en kan de uitvoering van de interface IConvertible aanroepen.DirectCast vereist strikte compatibiliteit van types in de erfenis hiërarchie, voert geen typeconversie uit, maar alleen referentieconversie.TryCast retourneert Nothing als conversie niet mogelijk is, zonder een uitzondering te genereren (geschikt alleen voor referentietypen).Codevoorbeeld:
Class Animal : End Class Class Dog Inherits Animal End Class Dim a As Animal = New Dog() Dim d1 As Dog = CType(a, Dog) Dim d2 As Dog = DirectCast(a, Dog) Dim d3 As Dog = TryCast(a, Dog) ' d3 — Dog-object of Nothing
Kernpunten:
CType is de meest veelzijdige, maar kan uitzonderingen werpen als de conversie onmogelijk is.DirectCast controleert alleen strikte typecompatibiliteit van referenties.TryCast genereert geen uitzondering, maar retourneert gewoon Nothing.Kan TryCast worden gebruikt voor waarde-types?
Nee, TryCast werkt alleen met referentietypes. Bij gebruik voor structuren zal er een compilatiefout optreden.
Wat is het verschil tussen CInt(obj) en CType(obj, Integer)?
Ze zijn vergelijkbaar, beide proberen obj naar Integer te converteren. Echter, CInt is strikter met betrekking tot het formaat van de string, en het is beter om CType te gebruiken bij expliciete conversies.
Wanneer moet DirectCast worden gebruikt in plaats van CType?
Wanneer bekend is dat de objecten een erfrelatie hebben of één interface implementeren, en geen gebruikersgedefinieerde typeconversie nodig is. DirectCast is efficiënter, omdat het geen conversielogica aanroept.
In het project wordt altijd CType gebruikt voor alle conversies, wat soms leidt tot ongehandlede uitzonderingen wanneer types niet compatibel zijn.
Voordelen:
Nadelen:
Het team gebruikt verschillende operatoren: DirectCast voor referentietypen, TryCast bij het werken met onbekende objecten. Afhandeling van Nothing is toegevoegd voor TryCast.
Voordelen:
Nadelen: