Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że VB.NET nie ma bezpośredniego odpowiednika (type)instance
mechanizmu rzutowania języka C # . Podnoszę to, ponieważ jest to przydatne jako punkt wyjścia do porównania dwóch operatorów VB.NET (i są one operatorami, a nie funkcjami, mimo że mają semantykę funkcji).
DirectCast()
jest bardziej rygorystyczny niż operator rzutowania C #. Pozwala na rzucanie tylko wtedy, gdy rzucany przedmiot jest typem, do którego rzucasz. Uważam, że nadal będzie rozpakowywać typy wartości, ale w przeciwnym razie nie dokona żadnej konwersji. Na przykład nie można rzutować z short
do int
, tak jak w przypadku (int)
rzutowania w języku C # . Ale można rzutować z IEnumerable
tablicy an do tablicy, jeśli podstawową IEnumerable
zmienną obiektu naprawdę jest Array
. Oczywiście możesz rzutować z Object
do wszystkiego, zakładając, że typ instancji obiektu naprawdę znajduje się gdzieś poniżej typu rzutowania w drzewie dziedziczenia.
Jest to pożądane, ponieważ jest znacznie szybsze . Jest mniej konwersji i sprawdzania typów, które muszą mieć miejsce.
CType()
jest mniej rygorystyczny niż operator rzutowania C #. Będzie robić rzeczy, których po prostu nie można zrobić z (int)
rzutowaniem prostym , na przykład przekonwertować łańcuch na liczbę całkowitą. Ma taką samą moc, jak wywołanie Convert.To___()
w języku C #, gdzie ___
jest docelowym typem rzutowania.
Jest to pożądane, ponieważ jest bardzo potężne. Jednak ta moc odbywa się kosztem wydajności; nie jest tak szybki jak DirectCast()
operator rzutowania w języku C #, ponieważ może wymagać sporo pracy, aby zakończyć rzutowanie. Generalnie wolisz, DirectCast()
kiedy możesz.
Wreszcie przegapiłeś jeden operator rzutowania:, TryCast()
który jest bezpośrednim analogiem do as
operatora C # .