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

Programming HandBook part 81 ppt

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 (142.34 KB, 6 trang )

2.2.4 Bắt lỗi xử dụng các ngoại lệ
.NET được thiết kế để đơn giản hoá quá tŕnh bẫy lỗi thông qua các ngoại lệ, ư
tưởng ở đây là một vùng mă được thiết kế như là các thủ tục quản ngoại lệ, mỗi
đoạn mă có thể giải quyết một điêu kiện lỗi riêng (ví dụ, một file không được t́m
thấy, hoặc không được phép thực thi một số lệnh). Những điều kiện này có thể
được định nghĩa kĩ hoặc sơ qua tuỳ bạn. Cấu trúc ngoại lệ bảo đảm rằng khi một
điều kiện sinh lỗi xảy ra, ngay lập tức luồn thi hành sẽ nhảy đến thủ tục quản ngoại
lệ.


2.2.5 Sử dụng các thuộc tính
Các thuộc tính trong IL cho phép người dùng có thể sử dụng dễ dàng hoặc có thể
tự thiết lập các thuộc tính của riêng họ

Tiến trình biên dịch thành mă .NET – Common language runtime
CLR có nhiệm vụ biên dịch mă IL thành mă nền .NET. Đây là một tiến tŕnh biên
dịch kiểu just in time ( JIT ), khác với kiểu thông dịch trong Java.
Thay vì phải dịch toàn bộ ứng dụng một lần, tŕnh biên dịch JIT sẽ biên dịch từng
phần mă khi nó được gọi Khi mă nguồn được biên dich, mă kết quả của nó sẽ được
lưu lại trong bộ nhớ cho tới khi thoát khỏi ứng dụng, và trong các lần xử l y tiếp
theo, máy tính sẽ không phải biên dịch lại một lần nữa, đây là ly do các chương
tŕnh .NET luôn chạy nhanh hơn trong những lần sau.
Một đặc điểm nữa là .NET luôn hỗ trợ tối ưu tuỳ vào loại vi xư l y, đối với các tiến
tŕnh biên dịch các ngôn ngữ cấp cao xưa kia sẽ không tối ưu vào loại vi xử lư, nền
.NET hỗ trợ tuỳ loại vi xử l mà đưa ra cách thức phù hợp.

Nortonxe(UDS)

Phần 3: Cách thức làm việc của một chương tŕnh C#

Trọng tâm phương pháp làm việc của C# xoay quanh khái niệm Assembly.


Assembly là tập hợp mã đă được biên dịch sang .NET. 1 Assembly chứa nội dung
thực thi chương trình hoặc các thư viện động. Assembly có thể được chứa trong
nhiều file. Assembly cũng có thể chứa metadata dùng để mô tả các kiểu và phương
thức được định nghĩa trong mă tương ứng. Assembly metadata này đựơc hiểu như
là manifest, cho phép kiểm tra phiên bản và tính trạng của assembly:
 Chỉ định thông tin, như là tên và phiên bản của assembly
 Danh sách các kiểu được tập hợp bởi assembly
 Danh sách các assembly khác được yêu cầu bởi assembly hiện tại
 Danh sách mă truy vấn, mức độ bảo mật bao gồm mức độ được yêu cầu bởi
assembly và quyền hạn cho phép của assembly đó



Phân loại Assembly
1)Private Assemblies
Private assemblies là kiểu đơn giản nhất. Nó chứa phần mềm và chỉ được dùng cho
phần mềm đó. Với phần mô tả này bạn có thể chứa đựng các private assemblie
cung cấp cho một ứng dụng kiểu thực thi và một số thư viện, các thư viện này chứa
mă sẽ được thi hành bởi ứng dụng đó.

2)Shared Assemblies
Shared assemblies được dành cho các thư viện công cộng có thể dùng cho bất kì
ứng dụng nào.


Tiến trình thực thi bởi một chương trình C#
Khi chương tŕnh được thực thi, CLR sẽ xác nhận đến các Assembly manifest và
quyền hạn chạy của chương trinh trên hệ thống. Nếu hệ bảo vệ hệ thống kô cho
phép chương trình chạy, chương trình sẽ kô chạy. Nếu được phép, CLR sẽ thực thi
mă lệnh. Bit đầu tiên của code được nạp vào bộ nhớ và được biên dịch thành mă

nhị phân từ IL bởi JIT. Sau khi được biên dịch, mă được thực thi và chứa trong bộ
nhớ.


Các phương thức bảo vệ của .Net và OS với chương trình
Hệ thống đảm bảo rằng private assemblies sẽ không được dùng bởi phần mềm
khác, bởi vì một ứng dụng chỉ có thể load private assemblies trong cùng folder với
chương trình chính hoặc là trong một thư mục con của nó.
1 giải pháp đưa ra là các private assemblies của một phần mềm sẽ được cài đặt vào
cùng một thư mục, nhưng kô thể đảm bảo rằng sẽ không có một gói phần mềm sửa
chữa hoặc ghi đè lên private assemblie dành riêng cho một phần mềm khác. Lúc
này OS cung cấp một khả năng cho phép mỗi chương tŕnh chỉ nhìn thấy một bộ
assemblies cho dù bộ đó có bị cài đè và trùng tên với bộ ass trước
Bởi vì bất kì ứng dụng nào cũng có thể truy xuất một shared assembly, nên cần
phải có các cơ chế để bảo vệ các rủi ro sau:
 Tranh chấp tên, khi một công ty tạo ra các shared assembly trùng tên với các
shared assembly sẵn có của bạn. Về mặt lí thuyết mă của bạn có thể truy
xuất vào cả hai assembly này song đây có thể là một vấn đề phức tạp.
 Lỗi của một assembly có thể bị ghi đè bởi một phiên bản khác của cùng
same assembly - một phiên bản mới không tương thích với những ǵ sẵn có.
Giải pháp cho những vấn đề trên là đặt các shared assembly trong một cây thư mục
đặt biệt của hệ thống, có thể xem như là assembly cache toàn cục. Không giống
như các private assembly, nó không đơn giản là copy assembly sang một thư mục
thích hợp - nó cần được cài đặt rõ ràng vào cache. Tiến tŕnh này có thể được thực
thi bởi một số tiện ích của .NET, bao gồm luôn quá trình kiểm tra trên assembly,
tương tự như cài đặt một thư mục trong assembly cache để đảm bảo tính toàn vẹn
của assembly.
Để tránh tranh chấp tên, shared assemblies đưa ra một được quản lí dựa trên một
khóa mật mă chính. Tên này được gọi là strong name, được bảo đảm về tính độc
nhất, và phải được trích dẫn bởi ứng dụng muốn tham chiếu đến một shared

assembly.
Vấn đề về tương thích với lỗi do ghi đè một assembly được đánh địa chỉ theo thông
tín phiên bản trong assembly manifest, và cho phép cài đặt song song.

Continue

Nortonxe(UDS)

Ví dụ về quá tải toán tử trong C#:
Quote:
1: public class zzz
2: {
3: public static void Main()
4: {
5: yyy a = new yyy(10);
6: yyy b = new yyy(5);
7: yyy c;
8: c = a + b ;
9: System.Console.WriteLine(c.i);
10: }
11: }
12:
13: public class yyy
14: {
15: public int i;
16: public yyy(int j)
17: {
18: i = j;
19: }
20:

21: public static yyy operator + (yyy x , yyy y)
22: {
23: System.Console.WriteLine(x.i);
24: yyy z = new yyy(12);
25: return z;
26: }
27: }



Mặc dù chúng ta viết mã trong C# có quá tải toán tử như vậy, nhưng trình
biên dịch C# sẽ phải dịch ra ngôn ngữ trung gian IL để thực thi trên môi
trường .NET. Đoạn lệnh đã được biên dịch ra như sau:
Quote:
1: .assembly my_namespace {}
2: .class private auto ansi zzz extends [mscorlib]System.Object
3: {
4: .method public hidebysig static void vijay() il managed
5: {
6: .entrypoint
7: .locals (class yyy V_0,class yyy V_1,class yyy V_2)
8: ldc.i4.s 10
9: newobj instance void yyy::.ctor(int32)
10: stloc.0
11: ldc.i4.5
12: newobj instance void yyy::.ctor(int32)
13: stloc.1
14: ldloc.0
15: ldloc.1
16: call class yyy yyy::op_Addition(class yyy,class yyy)

17: stloc.2
18: ldloc.2
19: ldfld int32 yyy::i
20: call void [mscorlib]System.Console::WriteLine(int32)
21: ret
22: ret
23: }
24: }
25:
26: .class public auto ansi yyy extends [mscorlib]System.Object
27: {
28: .field public int32 i
29: .method public hidebysig specialname static class yyy op_Addition(class yyy
x,class yyy y) il managed
30: {
31: .locals (class yyy V_0,class yyy V_1)
32: ldarg.0
33: ldfld int32 yyy::i
34: call void [mscorlib]System.Console::WriteLine(int32)
35: ldc.i4.s 12
36: newobj instance void yyy::.ctor(int32)
37: stloc.0
38: ldloc.0
39: stloc.1
40: ldloc.1
41: ret
42: }
43:
44: .method public hidebysig specialname rtspecialname instance void .ctor(int32
j) il managed

45: {
46: ldarg.0
47: call instance void [mscorlib]System.Object::.ctor()
48: ldarg.0
49: ldarg.1
50: stfld int32 yyy::i
51: ret
52: }
53: }
Nortonxe(UDS)

Các lỗi chuối bưởi của VS Studio 2003


×