Những tính năng đơn giản nhưng thú vị của VS2010 và C# 4.0

Giới thiệu

VS 2010 và C#4.0 được giới thiệu có rất nhiều tính năng mới. Trong bài viết này, tôi sẽ cố gắng trình bày những tính năng đơn giản và hữu ích nhất của chúng.

1. Ẩn phần code được chọn

Nhiều khi, tình huống phát sinh khi chúng ta muốn ẩn một đoạn thay vì toàn bộ code. Việc này sẽ dễ dàng hơn trong VS 2010. Chỉ cần chọn phần code bạn muốn ẩn và nhấp chuột phải chọn Outlining – Hide Selection

Cách tương tự một vùng mã có thể đóng và mở rộng. Bất cứ khi nào bạn muốn hiện lại đoạn mã, nhấp chuột phải rồi chọn Outlining -> Stop Hiding Current.


2. DataTips

Lựa chọn này cung cấp cho ta cách đơn giản hơn để giao tiếp với bất kỳ biến nào lúc debug. Trong VS 2010, DataTip có thể được đặt cố định ở một vị trí hay để trôi nổi. Điều này giúp bạn dễ dàng hơn trong quá trình theo dõi các biến và giá trị của nó trong suốt quá trình debug. Ta có thể thêm nhiều DataTips và thậm chí các datatips này có thể duy trì sau khi phiên làm việc (session) kết thúc.

Để thêm ghim(Pin) vào DataTip, chỉ cần di chuyển con trỏ chuột qua bất kỳ biến nào là bạn có thể nhìn thấy biểu tượng pin


Bạn có thể di chuyển pin đến bất kỳ vị trí nào. Pin cung cấp ba nút: Close, Unpin(để gỡ pin). Expand (để thêm chú thích)


Có khi code đã được debug nhưng chúng ta vẫn muốn nhìn lại giá trị của biến/biểu thức được giữ trong lúc debug, do đó đó tính năng này rất hữu ích.


Bạn có thể xuất/nhập(Export/Import) DataTips của mình bằng cách nhấp chuột vào Debug -> Export DataTips -> Xác định vị trí tệp XML bạn muốn được lưu.

Bạn có thể truy cập vào tệp XML của bạn mọi lúc bằng cách chọn Import trên Debug – > Import DataTips

3. String.IsNullOrWhiteSpace

Phương thức này kiểm tra một chuỗi xác định là trống, null hay chỉ các ký tự khoảng trắng. Nếu chuỗi chứa bất bất cứ trường hợp nào kể trên hoặc ký tự đặc biệt dưới đây thì phương thức sẽ trả về true

“n”: xuống dòng

” r” : trở về đầu dòng

“v”: để tab theo cột

Các ký tự khoảng trắng (dấu cách)

“t”: cho ký tự Tab


4. Đặt tên và tham số tùy chọn

Tham số VS2010 trở thành tùy chọn khi giá trị được gán mặt định


Trong phương thức trên, ta có thể quên Val1 và Val2 do chúng có giá trị mặc định và có thể coi là tùy chọn. Lúc này ta bắt đầu gõ phương thức, gợi ý sẽ hiển thị các tham số tùy chọn


Đặt tên đối số cho phép người dùng không phải nhớ thứ tự các tham số. Nếu biết tên tham số, bạn có thể gọi chúng theo bất kỳ thứ tự nào. Hỗ trợ thông minh đặt tên đối số bằng tên tham số theo sau dấu hai chấm


Đây là một ví dụ đầy đủ về tùy chọn và đặt tên đối số



5. Làm nổi bật (Highlighting)

Chọn một định danh bất kỳ trong code và tất cả những vị trí có định danh này sẽ được làm nổi bật (Highlighting)

Trong ví dụ bên dưới, tôi đã chọn Val2 và tất cả những chỗ sử dụng từ đó được tự động highlight.


6. Tự sinh code một cách thông minh tùy ngữ cảnh sử dụng

Tính năng này khá thú vị. Tôi đã trải nghiệm nó khi tạo một lớp test và trong khi khai báo đối tượng, do tôi viết lỗi và nó cho phép tôi tạo một đối tượng với dòng bị đỏ

Khi nhìn dòng bị đỏ, tôi chỉ cần nhấp chuột phải và nhìn các lựa chọn được gọi ra, gồm: Class và New Type. Sự thông minh được cải tiến rất nhiều nên cho phép nếu bất kỳ phương thức nào chưa có trong lớp có thể được sử dụng trước khi tạo ra nó


7. Định tuyến URL (URL Routing)

Việc ánh xạ URL có thể mở rộng tới một mức độ nhất định trong ASP.NET 2.0. Ta có thể định nghĩa URL để hiển thị nhưng vấn đề là trong trường hợp postback, URL thực ở trình duyệt sẽ bị hiển thị URL routing được giới thiệu trong ASP.NET 3.5. Vấn đề của PostBack được giải quyết khi ta tạo các lớp xử lý khác phụ thuộc vào số định tuyến URL.

Trong ASP.NET 4.0 cần định nghĩa các lớp xử lý riêng cho mỗi định tuyến đã bị xóa và xây dựng hàm hỗ trợ đặt tên là MapPageRoute để giúp triển khai định tuyến nhanh hơn. Những route này được đăng ký onApplication_Start

Cùng làm định tuyến trong một ví dụ đơn giản. Tôi có hai trang default default2. Và trên mỗi trang có một nút để đến trang tiếp theo. Cùng với đó, di chuyển từ trang này sang trang khác, tôi cũng cần gửi đi một tham số.

Đầu tiên trong tệp global.asax dưới Application_Start, ta phải đăng ký URL cái mà ta muốn xuất hiện trên trình duyệt.


default sẽ có đường dẫn MyfirstPage/Value trong tên tham số và default2 sẽ có đường dẫn MySecongPage/value trong tên tham số

Khi bấm vào nút của trang mặc định, tôi phải thêm mã để gọi trang default2


An” là giá trị của tham số Name, và một đoạn code tương tự được thêm vào trang default2 để trở lại trang default


Định tuyến trở lên dễ dàng và đơn giản hơn. Ta cũng có thể có qua nhiều hơn một tham số

8. Hỗ trợ ngôn ngữ động

Ngôn ngữ động (Dynamic Language) là thứ không được kiểm tra trong thời gian-biên dịch (compile-time), mà chúng chỉ được xác định là đối tượng trong thời gian chạy (runtime). Viết nó nhanh và dễ hơn nhưng ta không thể nhìn thấy lỗi biên dịch. Vì vậy ta phải chắc chắn ứng dụng xử lý như mong muốn.

Nếu ta xem các phiên bản trước của C# là ngôn ngữ tĩnh hoàn toàn, nhưng 4.0 được thêm yếu tố động (dynamic) để hỗ trợ tính năng động. Sử dụng từ khóa dynamic nghĩa là nói với trình biên dịch tắt việc kiểm tra khi biên dịch


Bay giờ đến một câu hỏi rất hiển nhiên, sự khác biệt giữa kiểu Object, Var và Dynamic là gì. Cùng xem:

Đối tượng (Object) Dynamic Var
Trình biên dịch có thông tin về kiểu của biến Không có thông tin với trình biên dịch Trình biên dịch hoàn tất thông tin
Biến yêu cầu chọn trước khi sử dụng Không yêu cầu chọn Không yêu cầu chọn, do trình biên dịch đã hoàn tất thông tin
Nếu ta không có nhiều thông tin của kiểu dũ liệu, nó rất hữu dụng Khi ta cần viết ít mã và sử dụng ngôn ngữ động Thường sử dụng với Linq

9. Tạo ra ClientID bằng cách sử dụng ClientIDMode

Trong ASP.NET, nếu ta nhìn bên phía client thì rất khó để đoán được ClientId của trang là gì. ASP.NET sử dụng một hệ thống tên duy nhất cho việc tạo ClientId

Nhưng giờ với ASP.NET 4.0, xử lý ClientID trở lên dễ dàng. Ta đã thấy nếu thêm bất kỳ control nào trên trang aspx và xem nguồn code, ta có thể thấy id của vài control tương tự như “ctl00_MainContent_txtName”. Bây giờ ta có thể đặt ID mong muốn cho thuộc tính của ClientIDMode.

ASP.NET 4.0 hỗ trợ bốn kiểu chế độ cho thuộc tính ClientIDMode

Tự động (Auto)

ID của ASP.NET 2.0/3.0/3.5 được tạo ra cho đến nay

Ví Dụ


Khi ta xem nguồn của nó, ClientId được tạo ra là “ctl00_MainContent_txtData” :


Tĩnh (Static)

Chế độ này đặt ID tĩnh bên phía client, nghĩa là ID đã đăng ký để điểu khiển phía server cũng sẽ được sử dụng cho ID phía client. Nhưng nếu chế độ đặt là tĩnh cho việc kiểm soát lặp đi lặp lại thì trách nhiệm của nhà phát triển là đảm bảo tính duy nhất của ID phía client

Ví dụ


Nhìn vào nguồn của nó, Client Id được tạo ra là “divVal3”


Khả năng dự đoán (Predictable)

Khả năng dự đoán phụ thuộc vào tên cha của control ClientID để tạo giá trị ID client riêng. Nó có tên cha gạch dưới tên control, không gồm ctxxx. Điều này rất hữu ích cho control DataBound

Ví dụ


Xem nguồn của nó:


Kế thừa (Inherit)

Đây là trạng thái mặc định cho mọi control. Nó tìm đến control cha để lấy giá trị cho ClientIDModel

Ví dụ


Nó không đề cập đến bất kỳ chế độ nào, mặc định là Inherit


Ta có thể đặt các thuộc tính này theo ba cách:

1. Mức độ control (control level)


2. Mức độ trang (Page Level)


3. Mức độ ứng dụng (Application Level)

Trong tệp web.config, đặt dưới system.web. Nó hữu dụng khi nâng cấp ứng dụng từ 2.0/3.0/3.5 lên 4, lúc đó chế độ mặc định thời gian sẽ tự động vì vậy tất cả control sẽ trả lại tự động, nhưng lúc bạn nâng cấp lên 4, nó sẽ được đoán trước. Vậy để code làm việc, ta đặt clientIDMode=”Auto” trong tệp web.config


Kết luận

Tôi đã tạo ra một ứng dụng mẫu sử dụng tất cả các tính năng đã đề cập ở trên. Đây chưa phải kết thúc, mới chỉ là bắt đầu khám phá các tính năng của VS2010. Nó thực sự thú vị khi tìm hiểu sâu những tính năng này và nhiều hơn nữa

Lịch sử

  • 9/11/2011: Phiên bản ban đầu
  • 15/11/2011: Chỉnh sửa tiêu đề và thêm nhiều tính năng hơn
  • 17/11/2011: Thêm một tính năng mới “ClientIdMode

Nguồn: codeproject

Dịch bởi Nguyễn Thị Linh


Leave a Reply

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