Tải bản đầy đủ (.pdf) (10 trang)

Các giải pháp lập trình CSharp- P12 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.67 MB, 10 trang )

111
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu

Đặc tính có được thừa kế bởi các kiểu dẫn xuất hay không
l!2.MIs9I$4&g>)Kh
NOM%|>)K'5.(.&'S$&>)i8X
M%'F49MIIG=g;(..^Z_hP
M%8!&CLR8O)4';i:M
9BNOM%
l  *  .  !  2  e'  &I  %  S'  )3  ;  .    Q    M  C  Q  $
System.Attribute
 P   ! 2 e' &I    
public
   F >  I  G &5
+
Attribute
-"!2e'&IF2.M:C)=4P
¯Ç•‘ÀÇ‘M:C)=@C¯Ç•‘ÀÇ‘i2gpositional parameterh!
2H&…8&*F&M:C)=8
X )ee'0O)6DÀÇ‘i2)!
2L…2 0,4)!2&CD
ÀÇ‘$>>gnamed parameterh
l        :     )e    )  !  28 ¥Î¤ ‘  )  !  2
AttributeUsageAttribute
!2e'&I&*l!2
AttributeUsageAttribute
#$.DÀÇ‘i2DÀÇ‘$>>8$.4&^^Pi.!
iJii@$)!2e'&I&*I&*4)
AttributeUsageAttribute
!4Jii.4D
Bảng 3.3


Các thành viên thuộc kiểu liệt kê AttributeUsage
Thông số Kiểu Mô tả Mặc định
ValidOn
i2
"    >       >
System.AttributeTargets
8  J  i
NOM%.!2@
F=>F
AttributeTargets.All
AllowMultiple
$>
>
l!2F$Ji
N.NO'4
false
Inherited
$>
>
l!2F$QI&C
)3  ;  '     > $
X1'4
true
u2))<'%&'*.!2e'&IF>
AuthorAttribute
8X
&*;i>4' *'(.&'
AuthorAttribute
&.
M:C)=486.#:>l''>N 

O)
AuthorAttribute
4.DÀÇ‘i2:>
Company

24gF)e.DÀÇ‘$>>h8
Name
2Jz0g4
)e.DÀÇ‘$>>h
using System;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly,
AllowMultiple = true, Inherited = false)]
public class AuthorAttribute : System.Attribute {
112
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
private string company; // Công ty của tác giả
private string name; // Tên tác giả
// Khai báo phương thức khởi dựng công khai.
public AuthorAttribute(string name) {
this.name = name;
company = "";
}
// Khai báo thuộc tính Company có quyền set/get.
public string Company {
get { return company; }
set { company = value; }
}
// Khai báo thuộc tính Name chỉ-đọc.
public string Name{
get { return name;}

}
}
U<'O)
AuthorAttribute
\
// Khai báo Square Nguyen là tác giả của assembly.
[assembly:Author("Square Nguyen", Company = "Goldsoft Ltd.")]
// Khai báo Square Nguyen là tác giả của lớp.
[Author("Square Nguyen", Company = "Goldsoft Ltd.")]
public class SomeClass {
§
}
// Khai báo Stephen Chow là tác giả của lớp.
[Author("Stephen Chow")]
public class SomeOtherClass {
§
113
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
}
14.
14.
S d ng c ch ph n chi u đ ki m traử ụ ơ ế ả ế ể ể
S d ng c ch ph n chi u đ ki m traử ụ ơ ế ả ế ể ể
các đ c tính c a m t ph n t ch ng trìnhặ ủ ộ ầ ử ươ
các đ c tính c a m t ph n t ch ng trìnhặ ủ ộ ầ ử ươ


Bạn muốn sử dụng cơ chế phản chiếu để kiểm tra các đặc tính tùy biến đã được
áp dụng cho một phần tử chương trình.



Gọi phương thức
GetCustomAttributes
của đối tượng dẫn xuất từ lớp
System.Reflection.MemberInfo
(đối tượng này mô tả phần tử chương trình cần
kiểm tra).
7.4NOM%)3;Q
MemberInfo
y'&
t.
Type
8
EventInfo
8
FieldInfo
8
PropertyInfo
8
MethodBase

MethodBase
F>.
\
ConstructorInfo

MethodInfo
L*F0M:
GetCustomAttributes
I

F$&%D$'RM:'@.:!
2e'&IS$)NOM%PGB.'J:!
2e'&I:4:!2FÏMCNET
Framework
RM:
GetCustomAttributes
F)*:U*N>6.DD
bool

;iM:'F!2$QIQ'4U*
:6>..DD
Type
Fk.&08I9!2
S$Ji&C
Type

u2)O)!2e'&I
AuthorAttribute
S$&.^Z^
)  F     
GetCustomAttributesExample
 RM : 
Main
 @ 0 M :
GetCustomAttributes
8  0    !  2    I  9      J  F        
AuthorAttribute
L*F=X!2'.I
AuthorAttribute
';>G.4NO)MI

I
using System;
[Author("Stephen Chau")]
[Author("Square Nguyen", Company = "Goldsoft Ltd.")]
public class GetCustomAttributesExample {
public static void Main() {
// Lấy đối tượng Type cho chính lớp này.
Type type = typeof(GetCustomAttributesExample);
// Lấy các đặc tính cho kiểu này. Sử dụng bộ lọc để
// kết quả trả về chỉ có các thể hiện của AuthorAttribute.
114
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu
object[] attrs =
type.GetCustomAttributes(typeof(AuthorAttribute), true);
// Liệt kê các đặc tính.
foreach (AuthorAttribute a in attrs) {
Console.WriteLine(a.Name + ", " + a.Company);
}
// Nhấn Enter để kết thúc.
Console.ReadLine();
}
}
4
115
Chương 4:TIỂU TRÌNH, TIẾN TRÌNH, VÀ SỰ ĐỒNG BỘ
116

117
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
K..* Microsoft Windows X

M%gI%Eprocessh*'t X.#I
%=t g&5%EthreadhPM
'@%&'.I%%:))=
2v).NET Framework P.M'@%&'
=\
"

|O)€62v.NET Framework*
%.g._ZI_`h

w.9%=.%&I$FIGg.
_a_[h

lt&F9%=%g._b_ch

P*')QI%.g._Zd_ZZh

L.5*. .JF*'.:)g._Z]h
1.
1.
Th c thi ph ng th c v i thread-poolự ươ ứ ớ
Th c thi ph ng th c v i thread-poolự ươ ứ ớ


Bạn cần thực thi một phương thức bằng một tiểu trình trong thread-pool của bộ
thực thi.


Khai báo một phương thức chứa mã lệnh cần thực thi; phương thức này phải trả
về

void
và chỉ nhận một đối số. Sau đó, tạo một thể hiện của ủy nhiệm
System.Threading.WaitCallback
tham chiếu đến phương thức này. Tiếp tục, gọi
phương thức tĩnh
QueueUserWorkItem
của lớp
System.Threading.ThreadPool
, và
truyền thể hiện ủy nhiệm đã tạo làm đối số. Bộ thực thi sẽ xếp thể hiện ủy nhiệm
này vào hàng đợi và thực thi nó khi một tiểu trình trong thread-pool sẵn sàng.
HI:)O)%F D/')'%.D$
%t %vF.G&C2*86
'%H8.D#z$zzz%8% C
*#D. ) =e$uO)
()z@.5.29'.4v
D#z$zzz%
.NET Framework.=M()z.GF'
;49>q
ThreadPool
RM:
QueueUserWorkItem

X&*=.M:&5.%()z g!4
$h"#4$.4&C.'.
WaitCallback
g.
IIM:N=hw.%()zÏ8F6
4IIQ$=4'wS48'%I
G8%'9'()z64IIQ$

uO)()z&=GMF6%#z$zzz%
7'>8NB<'()z$=M8J5..2O)
79'IiO)()z'8N;(.;X.\
118
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

L=9'iD%D$()zT&*4'
sDD'&5.D%'Q&>.S$z9zBp
*.!i]`%.#CPUD|D%D
()z4*D4 $

P?X&*O)()z =.S.=
I8&=kO)()z.2&>8&t.
=M:.&t&g;(.._]h==i
 g;(.._^h74'F)3I=K
%()zTq$FC>)"!)e)D
$J&i*&CD$&k*I%&=8
$9)@.X)9%=4
$

L*4>O)()z=I%*'. 
)u%D%()zF*8>J.D2%
I%*'?@CI&v()z
l!&8&*>!%()z*$
. 9)

L*4i%%()z8?
4's>47()z;OB4(
:=&*>.G$


"4S$!$%&*4'')QF
u2))<'%&'O)
ThreadPool
=.M:F>
DisplayMessage
u2)'@'
DisplayMessage
I()zN8NN4
FDD8NFDDD$
MessageInfo
gX.4.
%@ih
using System;
using System.Threading;
// Lớp dùng để truyền dữ liệu cho phương thức DisplayMessage
// khi nó được thực thi bằng thread-pool.
public class MessageInfo {
private int iterations;
private string message;
// Phương thức khởi dựng nhận các thiết lập cấu hình cho tiểu trình.
public MessageInfo(int iterations, string message) {
this.iterations = iterations;
119
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
this.message = message;
}
// Các thuộc tính dùng để lấy các thiết lập cấu hình.
public int Iterations { get { return iterations; } }
public string Message { get { return message; } }
}

public class ThreadPoolExample {
// Hiển thị thông tin ra cửa sổ Console.
public static void DisplayMessage(object state) {
// Ép đối số state sang MessageInfo.
MessageInfo config = state as MessageInfo;
// Nếu đối số config là null, không có đối số nào được
// truyền cho phương thức ThreadPool.QueueUserWorkItem;
// sử dụng các giá trị mặc định.
if (config == null) {
// Hiển thị một thông báo ra cửa sổ Console ba lần.
for (int count = 0; count < 3; count++) {
Console.WriteLine("A thread-pool example.");
// Vào trạng thái chờ, dùng cho mục đích minh họa.
// Tránh đưa các tiểu trình của thread-pool
// vào trạng thái chờ trong các ứng dụng thực tế.
Thread.Sleep(1000);
}
} else {
// Hiển thị một thông báo được chỉ định trước
// với số lần cũng được chỉ định trước.
for (int count = 0; count < config.Iterations; count++) {
120
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
Console.WriteLine(config.Message);
// Vào trạng thái chờ, dùng cho mục đích minh họa.
// Tránh đưa các tiểu trình của thread-pool
// vào trạng thái chờ trong các ứng dụng thực tế.
Thread.Sleep(1000);
}
}

}
public static void Main() {
// Tạo một đối tượng ủy nhiệm, cho phép chúng ta
// truyền phương thức DisplayMessage cho thread-pool.
WaitCallback workMethod =
new WaitCallback(ThreadPoolExample.DisplayMessage);
// Thực thi DisplayMessage bằng thread-pool (không có đối số).
ThreadPool.QueueUserWorkItem(workMethod);
// Thực thi DisplayMessage bằng thread-pool (truyền một
// đối tượng MessageInfo cho phương thức DisplayMessage).
MessageInfo info =
new MessageInfo(5, "A thread-pool example with arguments.");
ThreadPool.QueueUserWorkItem(workMethod, info);
// Nhấn Enter để kết thúc.
Console.WriteLine("Main method complete. Press Enter.");
Console.ReadLine();
}
}

×