Điều đầu tiên cần lưu ý là VB.NET không có (type)instance
cơ chế truyền trực tiếp tương tự với C # . Tôi đưa ra điều này bởi vì nó hữu ích như một điểm khởi đầu trong việc so sánh hai toán tử VB.NET (và chúng là toán tử, không phải hàm, mặc dù chúng có ngữ nghĩa hàm).
DirectCast()
nghiêm ngặt hơn toán tử đúc C #. Nó chỉ cho phép bạn truyền khi vật phẩm được truyền đã là loại bạn đang truyền. Tôi tin rằng nó sẽ vẫn mở hộp các loại giá trị, nhưng nếu không nó sẽ không thực hiện bất kỳ chuyển đổi nào. Vì vậy, ví dụ: bạn không thể truyền từ short
đến int
, giống như bạn có thể truyền trong C # (int)
. Nhưng bạn có thể truyền từ một IEnumerable
sang một mảng, nếu IEnumerable
biến đối tượng cơ bản của bạn thực sự là một Array
. Và tất nhiên bạn có thể ép kiểu từ Object
bất kỳ thứ gì sang bất kỳ thứ gì, giả sử kiểu của cá thể đối tượng của bạn thực sự nằm ở đâu đó bên dưới kiểu ép kiểu của bạn trong cây kế thừa.
Điều này là mong muốn vì nó nhanh hơn nhiều . Có ít chuyển đổi và kiểm tra loại cần diễn ra hơn.
CType()
ít nghiêm ngặt hơn toán tử ép kiểu C #. Nó sẽ thực hiện những điều bạn không thể làm với (int)
kiểu ép kiểu đơn giản , chẳng hạn như chuyển đổi một chuỗi thành một số nguyên. Nó có nhiều sức mạnh như gọi Convert.To___()
trong C #, trong đó ___
kiểu đích của diễn viên của bạn.
Điều này là mong muốn bởi vì nó rất mạnh mẽ. Tuy nhiên, sức mạnh này phải trả giá bằng hiệu suất; nó không nhanh bằng DirectCast()
hoặc toán tử ép kiểu của C # vì nó có thể cần phải thực hiện khá nhiều việc để hoàn thành quá trình ép kiểu. Nói chung bạn nên thích DirectCast()
khi bạn có thể.
Cuối cùng, bạn đã bỏ lỡ một toán tử ép kiểu:, là một toán tử TryCast()
tương tự trực tiếp với as
toán tử của C # .