1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Các Chủ Đề Tiến Bộ trong C# part 6 ppt

4 334 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Attributes
Thể loại Bài thuyết trình
Định dạng
Số trang 4
Dung lượng 101,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Attribute 1 attribute là 1 thứ dùng để đánh dấu marker mà được ứng dụng đến 1 phương thức hay 1 lớp thậm chí là 1 đối số riêng trong 1 phưong thức ,cung cấp thông tin thêm về mục đó.. ví

Trang 1

Attribute

1 attribute là 1 thứ dùng để đánh dấu (marker) mà được ứng dụng đến 1 phương thức hay

1 lớp thậm chí là 1 đối số riêng trong 1 phưong thức ,cung cấp thông tin thêm về mục đó

ví dụ attribute Conditional có thể được dùng để đánh dấu 1 phương thức như là 1 phương thức debug như sau :

[Conditional("DEBUG")]

public void DoSomeDebugStuff()

{

// do something

}

Để áp dụng 1 attribute đến 1 mục ta cung cấp tên của attribute trong ngoặc vuông ngay trước định nghĩa mục các attribute lấy vài thông số - những thông số này cung cấp bên trong dấu ngoặc theo sau tên attribute

Ở cấp độ cơ bản nhất của nó , ứng dụng 1 attribute vào 1 mục có thể đơn giản chỉ là thông tin thêm về mục đó đựợc bỏ trong assembly đuợc biên dịch dùng cho mục đích hướng dẫn thêm 1 số attribute được định nghĩa trong các lớp cơ sở đuợc nhận ra bởi trình biên dịch C#.mà từ đó trình biên dịch có thể gây ra những tác động trên mã ví dụ trên trình biên dịch sẽ biên dịch mã của mục Conditional chỉ nếu biểu tượng DEBUG đã được định nghĩa trước

Trong phần này ta sẽ xem xét 3 attribute sau :

- Conditional : có thể đánh dấu bất kì phương thức với attribute Conditional sẽ ngăn

ngừa trình biên dịch từ việc biên dịch phương thức đó hay bất kì câu lệnh mà tham khảo đến nó nếu tên biểu tượng không được định nghĩa điều này có thể được dùng cho điều kiện biên dịch

- Dllimport - đôi khi ta cần truy nhập đến các Window API cơ bản hoặc các hàm kiểu

cũ khác mà được thực thi trong các window DLLs.attribute Dllimport dùng cho mục đích này nó được dùng đánh dấu 1 phương thức được định nfghĩa trong Dll bên ngoài

- Obsolete - attribute này được dùng để đánh dấu 1 phương thức được xem như

obsolete ( không dùng nữa) tuỳ thuộc vào việc thiết lập trên attribute này , trình biên dịch sẽ sinh ra 1 cảnh báo hay lỗi nếu nó gặp bất kì mã nào cố gắng dùng phương thức này

Ta xem xét các attribute này thông qua ví dụ Attributes trình bày 1 message box dùng hàm Window API ,MessageBox , và cũng trình bày 2 thông điệp vá lỗi 1 trong những thông điệp này được gọi trung gian qua 1 phương thức obsolete

#define DEBUG // comment out this line if doing a release build

using System;

using System.Runtime.InteropServices;

Trang 2

using System.Diagnostics;

namespace Wrox.ProCSharp.AdvancedCSharp

{

class MainEntryPoint

{

[DllImport("User32.dll")]

public static extern int MessageBox(int hParent, string Message,

string Caption, int Type);

static void Main()

{

DisplayRunningMessage();

DisplayDebugMessage();

MessageBox(0, "Hello", "Message", 0);

}

[Conditional("DEBUG")]

private static void DisplayRunningMessage()

{

Console.WriteLine("Starting Main routine Current time is " +

DateTime.Now);

}

[Conditional("DEBUG")]

[Obsolete()]

private static void DisplayDebugMessage()

{

Console.WriteLine("Starting Main routine");

}

}

}

Đầu tiên ta chỉ định một số namespace

- DllImport nằm trong namespace System.Runtime.InteropServices

- Conditional nằm trong namespace System.Diagnostics

Bên trong phương thức ta định nghĩa phương thức mà ta gọi từ dll bên ngoài hàm API MessageBox() đuợc định nghĩa trong User32.dll, vì thế ta truyền tên tập tin vào attribute DllImport ta khai báo hàm giống như trong C

Tiếp theo trong phương thức DisplayDebugMessage() , ta chỉ muốn phương thức này chạy nếu ta đang làm 1 xây dựng vá lỗi, vì thế ta đánh dấu nó như là conditional trên biểu tượng DEBUG ta cũng xem phương thức này là 1 obsoblete , bởi vì ta đã viết một phiên

Trang 3

bản tốt hơn, DisplayRunningMessage(), mà trình bày thêm thời gian và ngày tháng.ta không khuyến khích mọi người dùng DisplayDebugMessage() thêm nữa, vì thế ta đánh dấu nó với attribute Obsolete để trình biên dịch sẽ trình bày 1 cảnh báo nếu phương thức này được dùng có 1 vài kiểu overload của hàm này :

[Obsolete("The DisplayDebugMessage is obsolete Use " +

"DisplayRunningMessage instead.")]

Hàm này sẽ sinh ra một cảnh báo nếu phương thức này được dùng, trong khi :

[Obsolete("The DisplayDebugMessage is obsolete Use " +

"DisplayRunningMessage instead.", true)]

sẽ gây ra lỗi biên dịch thay vì là 1 cảnh báo nếu phương thức này được dùng thông số thứ hai quy định đây là lỗi hay là cảnh báo nếu obsolete được dùng

Về attribute Conditional , đây là 1 attribute phức tạp , bởi vì nếu điều kiện không hợp, trình biên dịch không chỉ không biên dịch đoạn mã trong phương thức mà còn tự động bỏ qua bất kì dòng nào mã khác trong tập tin nguồn mà gọi phương thức này để trình biên dịch có khả năng làm điều này phương thức phải trả về void attribute Conditional chỉ có thể áp dụng đến phương thức hoàn chỉnh như là 1 đơn vị biên dịch

Chạy ví dụ trên với biểu tượng DEBUG đưọc định nghĩa cho ra kết quả lưu ý cảnh báo được đưa ra :

csc Attributes.cs

Microsoft (R) Visual C# NET Compiler version 7.00.9466

for Microsoft (R) NET Framework version 1.0.3705

Copyright (C) Microsoft Corporation 2001 All rights reserved

Attributes.cs(19,10): warning CS0612:

'Wrox.ProCSharp.AdvancedCSharp.MainEntryPoint.DisplayDebugMessage()'

is obsolete

Attributes

Starting Main routine Current time is 12/02/2002 18:47:32

Starting Main routine

Code for Download:

Attributes

Trang 4

 

Ngày đăng: 21/01/2014, 16:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w