Kiểu Dữ Liệu Object Và Dynamic Trong C#. – Nguyễn Anh Tuấn

Kiểu dữ liệu object là gì?

  •  Là một kiểu dữ liệu cơ bản của tất cả các kiểu dữ liệu trong .NET.
  •  Mọi kiểu dữ liệu đều được kế thừa từ System.Object
  •  Thuộc kiểu dữ liệu tham chiếu (đã trình bày ở bài Kiểu dữ liệu trong C#).

Kiểu dữ liệu object cung cấp một số phương thức ảo cho phép mình overload để sử dụng.

Một số phương thức tiêu biểu nằm trong object:

Phương thức Ý nghĩa
ToString() Trả về kiểu chuỗi của đối tượng (chuyển từ kiểu dữ liệu nào đó về kiểu chuỗi)
GetHashCode() Trả về mã băm của đối tượng.
Equals() So sánh 2 đối tượng và trả về true khi 2 đối tượng có giá trị bằng nhau, ngược lại trả về false.
GetType() Trả về kiểu dữ liệu của đối tượng.

Kiểu dữ liệu dynamic là gì?

Kiểu dynamic là một khái niệm mới được đưa vào trong C# 4.0.

Cú pháp khai báo kiểu dynamic hoàn toàn tương tự như khai báo biến bình thường:

dynamic <tên biến>;

Trong đó:

  • dynamic là từ khóa.
  • <tên biến> là tên do người dùng đặt.

Đặc điểm của kiểu dynamic:

  • Các đối tượng thuộc kiểu dynamic sẽ không xác định được kiểu cho đến khi chương trình được thực thi. Tức là trình biên dịch sẽ bỏ qua tất cả lỗi về cú pháp, việc kiểm tra này sẽ thực hiện khi chương trình thực thi.

Ý nghĩa:

  • Hỗ trợ Dynamic programming (lập trình động) cho ngôn ngữ lập trình sử dụng kiểu dữ liệu tĩnh như C#.
  • Giúp cải thiện khả năng tương thích với các ngôn ngữ và nền tảng (frameworks) động.
  • Giúp việc viết code đơn giản và nhanh hơn.
  • Có thể ép kiểu qua lại với các kiểu dữ liệu khác một cách bình thường

Phân biệt giữa biến kiểu object và biến kiểu dynamic

Từ khóa dynamic, được giới thiệu trong C# 4, tạo ra các kịch bản khác dựa trên từ khóa object truyền thống nhưng đơn giản hơn trong viết và maintain code. Thực tế, kiểu dynamic sử dụng kiểu System.Object nhưng không như object, dynamic không đòi hỏi việc đổi kiểu lúc biên dịch, mà chỉ định danh thời điểm chạy. Cả 2 đều có thể được lưu giá trị thuộc kiểu bất kỳ.

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ụ:Object 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 

  • 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:

    Object Problem

  • 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ữ.

Lưu ý:

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.

Từ khóa var trong C#

Từ khóa var được đưa ra từ C# 3.0, được sử dụng đại diện các kiểu đã được định nghĩa sẳn hoặc kiểu nặc danh. Một biến được khai báo var sẽ được định danh kiểu tại thời điểm biên dịch và không thể thay đổi kiểu lúc runtime.

Những lưu ý khi sử dụng từ khóa var:

  •  Bắt buộc phải gán giá trị ngay khi khởi tạo biến và không thể khởi tạo giá trị null cho biến var.

2.PNG

Lưu ý:  var chỉ là từ khóa dùng để khai báo biến không phải là một kiểu dữ liệu.

Khai báo biến bằng từ khóa var thường được ứng dụng trong:

  •  Duyệt mảng bằng foreach
  •  Truy vấn LinQ
Phân biệt object, var và dynamic

Về khái niệm thì:

  • Object là kiểu dữ liệu cơ bản của tất cả kiểu dữ liệu trong C#.
  • Var là một từ khóa để khai báo một cách ngầm định kiểu dữ liệu và kiểu anonymous (kiểu anonymous sẽ được trình bày ở những bài sau).
  • Dynamic là một từ khóa để khai báo kiểu dynamic. Kiểu dynamic cũng có thể tương tác với mọi kiểu dữ liệu nhưng khác object, biến kiểu dynamic chỉ được xác định kiểu dữ liệu khi chương trình thực thi.

Chúng ta cùng phân biệt object, var và dynamic qua bảng tổng hợp sau:

Đặc điểm Object Var Dynamic
Là một kiểu dữ liệu Phải Không Phải
Phải khởi tạo giá trị khi khai báo Không bắt buộc Bắt buộc Không bắt buộc
Sử dụng để làm kiểu trả về hoặc tham số cho hàm Không
Có khả năng ép kiểu qua lại với các kiểu dữ liệu khác Không
Thời điểm xác định kiểu dữ liệu thực sự Là một kiểu dữ liệu nên không cần xác định gì nữa Xác định ngay tại khai báo thông qua giá trị được gán vào Xác định khi chương trình thực thi

Share this:

  • Twitter
  • Facebook
Like Loading...

Related

Từ khóa » Khởi Tạo Object C#