Dynamic Trong C# 4 - Phần 1 - Ho Hai Thanh's Blog
Có thể bạn quan tâm
Friday, March 11, 2011
Dynamic trong C# 4 - Phần 1
Từ khóa dynamic và Dynamic Language Runtime (DLR) là những tính năng mới trong C# 4 và Microsoft .NET Framework 4. Bài viết này cung cấp những cái nhìn khái quát về tính năng dynamic trong C# 4.Dynamic là gì?
C# và Java thường được xem là ngôn ngữ lập trình tĩnh, trong khi Python, Ruby và JavaScript là những ví dụ của ngôn ngữ động. Thông thường, ngôn ngữ động không thực hiện kiểm tra kiểu tại thời điểm biên dịch chương trình và chỉ nhận dạng kiểu đối tượng tại thời điểm chạy chương trình. Điều này giúp cho việc viết code đơn giản và nhanh hơn, nhưng lúc đó bạn không nhận được lỗi biên dịch và chỉ đến khi thực hiện kiểm thử rất cẩn thận mới đảm bảo được chương trình bạn được viết chính xác. Trong C# 4, từ khóa dynamic đã được bổ sung để cải thiện khả năng tương thích với các ngôn ngữ và nền tảng (framework) động.. Dưới đây là ví dụ về việc sử dụng từ khóa dynamic: static void ChangeDynamicDataType() { dynamic t = "Hello!"; Console.WriteLine("t is of type: {0}", t.GetType()); t = false; Console.WriteLine("t is of type: {0}", t.GetType()); t = new System.Collections.Generic.List(); Console.WriteLine("t is of type: {0}", t.GetType()); } Output: t is of type: System.String t is of type: System.Boolean t is of type: System.Collections.Generic.List`1[System.Int32] Như bạn thấy, nó có thể gắn với các đối tượng có kiểu dữ liệu khác nhau vào biến được khai báo dynamic. Đoạn code được biên dịch bình thường và được định danh tại thời điểm chạy (runtime). Tuy nhiên, đoạn code sau sẽ được biên dịch bình thường, nhưng sẽ xuất hiện ngoại lệ (exception) tại thời điểm chạy: dynamic d = "Hello!"; //Dòng sau sẽ xuất hiện ngoại lệ thời điểm chạy. d++; Output: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException was unhandled Message=Operator '++' cannot be applied to operand of type 'string' Source=Anonymously Hosted DynamicMethods Assembly Bởi vì trình biên dịch không thể biết kiểu của đối tượng tại thời điểm chạy và do đó không thể nói với bạn rằng thao tác '++' không được hổ trợ trong trường hợp này.Sử dụng từ khóa dynamic, object hay var?
Vậy sự khác nhau giữa dynamic, object và var như thế nào và khi nào bạn nên dùng chúng? Từ khóa object mô tả cho kiểu System.Object, là lớp cha trên cùng trong phân cấp lớp C#, và có thể diễn tả cho bất cứ lớp nào khác. Nó được sử dụng khi không thể định danh được kiểu đối tượng tại thời điểm biên dịch và bạn cần sử dụng lệnh chuyển đổi sang một kiểu định nghĩa trước nếu muốn sử dụng các phương thức hoặc thuộc tính của kiểu đó. static void UseObjectVarible() { // Giả sử có một lớp tên Person. object o = new Person() { FirstName = "Thanh", LastName = "Ho" }; // Phải đổi kiểu đối tượng thành Person // để có thể sử dụng các thuộc tính của Person. Console.WriteLine("Person's first name is {0}", ((Person)o).FirstName); } 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. Nếu trình biên dịch không thể xác định được kiểu, nó sẽ tạo ra lỗi biên dịch: var varExample = 10; Console.WriteLine(varExample.GetType()); // In ra System.Int32 //Biến varExample là kiểu System.Int32: varExample = varExample + 10; //Dòng này sẽ bị lỗi khi biên dịch và chỉ có thể gán giá trị số nguyên cho varExample: varExample = "test"; 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, nó 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: static void UseDynamicVarible() { // Giả sử có một lớp tên Person. dynamic p = new Person() { FirstName = "Thanh", LastName = "Ho" }; //Có thể sử dụng các thuộc tính của Person mà không cần đổi kiểu. Console.WriteLine("Person's first name is {0}", p.FirstName); } Qua phần này, bạn có thể hiểu và sử dụng được từ khóa dynamic, một trong những tính năng mới của C# 4, Dynamic Language Runtime (DLR) sẽ được trình bày trong phần tiếp theo. Labels: C# 4, DLRNo comments:
Post a Comment
Newer Post Older Post Home Subscribe to: Post Comments (Atom)About Me
Unknown View my complete profile
Blog Archive
- ► 2013 (1)
- ► June (1)
- ► 2012 (1)
- ► June (1)
- ► 2010 (3)
- ► May (1)
- ► March (1)
- ► January (1)
- ► 2009 (11)
- ► December (2)
- ► August (2)
- ► July (2)
- ► May (4)
- ► March (1)
- ► 2008 (22)
- ► December (2)
- ► November (5)
- ► October (1)
- ► September (1)
- ► August (1)
- ► July (5)
- ► May (3)
- ► April (1)
- ► March (2)
- ► January (1)
- ► 2007 (17)
- ► November (4)
- ► August (6)
- ► July (1)
- ► June (2)
- ► March (2)
- ► February (2)
Page views
Labels
.NET (17) ADO.NET (1) Android (1) Apache (1) ASP.NET (2) Bing Maps (1) C# (16) C# 4 (4) ClickOnce (2) Crystal Report (1) DLR (3) Entity Framework (1) Interview Questions (1) Java (2) LINQ (1) Linux (1) NHibernate (1) Prism (1) Reflection (1) Security (1) Silverlight (3) Software Engineer (1) Sorting (1) SQL (2) SQL Server (6) SQL Server 2005 (1) Tài liệu tham khảo (1) TDD (5) Tiếng Nhật (1) Tiếng Việt (1) Unit Test (2) VS Color Scheme (1) WCF (1) WCF Ria Service (1) Windows 7 (1) WinForms (4)Từ khóa » Dynamic Là Gì C#
-
So Sánh Từ Khóa Var Và Dynamic Trong C# - Viblo
-
Kiểu Vô Danh Và Kiểu động Dynamic Trong C# C Sharp
-
Từ Khóa Dynamic Trong C# | How Kteam
-
Phân Biệt Giữa Biến Kiểu Object Và Biến Kiểu Dynamic - TEDU
-
Kiểu Dữ Liệu Object Và Dynamic Trong C# - Quản Trị Máy Tính
-
The Dynamic Type - The Complete C# Tutorial
-
Kiểu Dữ Liệu Object Và Dynamic Trong C#. – Nguyễn Anh Tuấn
-
Using Type Dynamic - C# Programming Guide - Microsoft Docs
-
Từ Khóa Dynamic Trong C# - IIS Windows Server
-
C# — Sự Khác Biệt Giữa Object, Dynamic Và Var
-
Tìm Hiểu Về Dynamic Programming Và Dynamic Language Runtime ...
-
Cuối Cùng Mình đã Hiểu Về STATIC Và DYNAMIC
-
Các Kiểu đặc Biệt Trong C#: Anonymous, Nullable, Dynamic
-
(PDF) Adding Dynamic Types To C# - ResearchGate