Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że VB.NET nie ma bezpośredniego odpowiednika (type)instancemechanizmu 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 shortdo int, tak jak w przypadku (int)rzutowania w języku C # . Ale można rzutować z IEnumerabletablicy an do tablicy, jeśli podstawową IEnumerablezmienną obiektu naprawdę jest Array. Oczywiście możesz rzutować z Objectdo 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 asoperatora C # .