Phân biệt giữa biến kiểu object và biến kiểu dynamic
Chúng ta thường thấu hầu hết các developer không phân biệt được sự khác nhau giữa biến kiểu object và dynamic trong C#. Tôi đã cố tìm các bài hướng dẫn trên web, nhưng không thể tìm thấy một lời giải hợp lý cho vấn đề này. Bài viết này sẽ giải thích vài điểm căn bản quan trọng về sự khác nhau giữa từ khóa object và dynamic trong C#.

Tổng quan, cả dynamic và object đều không được thực hiện việc kiểm tra kiểu khi biên dịch và được định danh kiểu của các biến lúc runtime tức là lúc chạy chương trình và cả 2 đều có thể được lưu giá trị thuộc kiểu bất kỳ. Object đươc giới thiệu trong C# 1.0. Sau đó tại sao dynamic lại được giới thiệu ở 4.0 khi mà object đã tồn tại rồi.
Các bạn hãy chú ý một số điểm khác biệt sau đây giữa biến kiểu object và dynamic trong C#:
Sự khác nhau số 1
- Object: Trình biên dịch có 1 phần thông tin về kiểu của biến, đây không phải là kiểu biên dịch an toàn.
Ví dụ:

Bạn cần chuyển đổi kiểu tường minh mọi lúc bạn muốn lấy giá trị của biến.
object a = "Rohatash Kumar"; string a1 = a.ToString();
- Dynamic: Trong biến dynamic, trình biên dịch không có bất cứ thông tin gì về kiểu của biến.
dynamic a = "Rohatash Kumar"; string a1 = a;
Sự khác nhau số 2
- Object: Được giới thiệu trong C# 1.0.
- Dynamic: Được giới thiệu trong C# 4.0.
Sự khác nhau số 3 3
- Object: Khi sử dụng một object, bạn cần chuyển kiểu biến object sang kiểu nguyên bản của nó để dùng trong các mục đích mong muốn. Trong sự khác nhau số 1, ví dụ dưới đây cho ra 1 lỗi.
object a = "Rohatash Kumar"; string a1 = a;
Nên bạn cần chuyển đổi kiểu mỗi khi bạn sử dụng nó
- Dynamic: Chuyển đổi kiểu không bắt buộc trừ khi bạn có thể cần biết các thuộc tính và phương thức liên quan đến kiểu dữ liệu.
Sự khác nhau số 4
- Object: Khi bạn sử dụng từ khóa object với một biến, nó có thể sinh ra một vấn đề lúc thực thi nếu giá trị được lưu trữ không chuyển sang được kiểu dữ liệu tương ứng. Nó có thể không hiển thị lỗi ở lúc biên dịch nhưng nó sẽ hiển thị lỗi lúc thực thi.
Ví dụ
String a = "Rohatash Kumar"; object a1 = a; int b = (int)a1;
Bây giờ hãy thực thi đoạn code:

- Dynamic: Khi chúng ta sử dụng từ khóa dynamic, nó sẽ không xảy ra vấn đề vì trình biên dịch có tất cả thông tin về giá trị được lưu trữ.
Tổng kết
Object hữu ích khi bạn không có thêm thông tin về kiểu dữ liệu. Dynamic hữu ích khi bạn cần code sử dụng reflection hoặc ngôn ngữ động hoặc các đối tượng COM và khi lấy giá trị từ một câu truy vấn LinQ.
Trích nguồn từ: c-sharpcorner.com
Bài viết liên quan
Sử dụng kiểu tập hợp (Enum)
Enum (viết tắt của Enumeration) trong C# là một kiểu dữ liệu đặc biệt cho phép bạn định nghĩa một tập hợp các hằng số có tên
Đọc thêmTính đóng gói (Encapsulation) và best practices trong OOP
(Tính đóng gói) là một trong những nguyên tắc cơ bản của lập trình hướng đối tượng (OOP).
Đọc thêmTính trừu tượng - Abstract classes and interfaces
Tính trừu tượng (Abstraction) trong OOP là kỹ thuật ẩn đi các chi tiết triển khai và chỉ hiển thị cho người dùng những chức năng cần thiết.
Đọc thêmTính chất kế thừa (Inheritance) và đa hình (polymorphism)
Kế thừa là cơ chế cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác.
Đọc thêmCách debug ứng dụng C#
Hướng dẫn cách debug chương trình C# trong Visual Studio và Visual Studio Code
Đọc thêmTìm hiểu về các loại Collection trong C#
Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên
Đọc thêmTổng quan về Generic và Non-Generic Collection
Hiểu khái niệm Generic và Non-Generic Collection và phân biệt giữa Generic Collection và Non-Generic Collection.
Đọc thêmSử dụng mảng (Arrays)
Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.
Đọc thêmLập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.
Đọc thêmVòng lặp (loop)
Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.
Đọc thêm