C# Advanced (Series #2)

1 min read

Read the previous article about C# Advanced: C# Advanced (Series #1)

c#
  • C# – Anonymous Types
  • C# – Dynamic Types
  • C# – Ternary Operator ?:
  • C# Generics & Generic Constraints
  • C# – Delegates
  • C# – Func Delegate
  • C# – Action Delegate
  • C# – Anonymous Method
  • C# – Events
  • C# – Extension Method
  • C# – HttpClient

C# – Dynamic Types

C# 4.0 (.NET 4.5) đã giới thiệu một kiểu mới gọi là dynamic để tránh việc kiểm tra kiểu compile-time. Kiểu dynamic thoát khỏi việc kiểm tra kiểu tại thời điểm biên dịch; thay vào đó, nó giải quyết type trong thời gian chạy.

Một biến kiểu dynamic được xác định bằng từ khóa dynamic

Trình biên dịch biên dịch các kiểu dynamic thành các kiểu object trong hầu hết các trường hợp. Tuy nhiên, loại thực tế của biến loại dynamic sẽ được giải quyết trong thời gian chạy (run-time).

Dynamic types thay đổi loại trong thời gian chạy dựa trên giá trị được chỉ định. Ví dụ sau đây cho thấy cách biến dynamic thay đổi loại dựa trên giá trị được chỉ định.

Các biến kiểu dynamic được ngầm chuyển đổi sang các kiểu khác.

Phương thức và tham số

Nếu bạn gán một class object cho kiểu dynamic thì trình biên dịch sẽ không kiểm tra các phương thức và tên thuộc tính chính xác của kiểu dynamic chứa class object tùy chỉnh. Hãy xem xét ví dụ sau.

Trong ví dụ trên, trình biên dịch C# không kiểm tra số lượng tham số, loại tham số hoặc không tồn tại. Nó xác thực những thứ này trong thời gian chạy và nếu nó không hợp lệ thì sẽ đưa ra một ngoại lệ trong thời gian chạy. Lưu ý rằng Visual Studio IntelliSense không được hỗ trợ cho các loại dynamic.

Avatar photo

BigQuery vs Google Cloud SQL – P2

Ở bài viết trước tôi đã tổng quan về khái niệm, các tính năng chính và so sánh sự khác biệt chính của GCP...
Avatar photo Toai Nguyen Cong
11 min read

BigQuery vs Google Cloud SQL – P1

Trong bối cảnh điện toán đám mây không ngừng phát triển, các doanh nghiệp bị ngập trong các lựa chọn khi nói đến việc...
Avatar photo Toai Nguyen Cong
5 min read

Leave a Reply

Your email address will not be published. Required fields are marked *