THỰC THI GIAO DIỆN phần 5
Số trang: 6
Loại file: pdf
Dung lượng: 115.98 KB
Lượt xem: 1
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Trong ví dụ 8.6, giao diện IStorable có một phương thức Read() và môt thuộc tính là Status. Giao diện này được thực thi bởi một cấu trúc tên là myStruct: public struct myStruct : IStorable
Nội dung trích xuất từ tài liệu:
THỰC THI GIAO DIỆN phần 5Trong ví dụ 8.6, giao diện IStorable có một phương thức Read() và môt thuộc tính làStatus. Giao diện này được thực thi bởi một cấu trúc tên là myStruct: public struct myStruct : IStorableĐoạn mã nguồn thú vị bên trong Tester. Chúng ta bắt đầu bằng việc tạo một thể hiện củacấu trúc và khởi tạo thuộc tính là –1, sau đó giá trị của status được in ra:0 myStruct theStruct = new myStruct(); theStruct.Status = -1; // khởi tạo Console.WriteLine(“theStruct.Status: {0}”, theStruct.status);Kết quả là giá trị của status được thiết lập: theStruct.Status = -1;Kế tiếp chúng ta truy cập thuộc tính để thay đổi status, một lần nữa thông qua đối tượnggiá trị: // thay đổi giá trị theStruct.Status = 2; Console.WriteLine(“Changed object”); Console.WriteLine(“theStruct.Status: {0}”, theStruct.Status);kết quả chỉ ra sự thay đổi: Changed object theStruct.Status: 2 Tại điểm này, chúng ta tạo ra một tham chiếu đến giao diện IStorable, một đối tượng giátrị theStruct được boxing ngầm và gán lại cho tham chiếu giao diện. Sau đó chúng tadùng giao diện để thay đổi giá trị của status bằng 4: // gán cho một giao diện // boxing ngầm định IStorable isTemp = (IStorable) theStruct; // thiết lập giá trị thông qua tham chiếu giao diện isTemp.Status = 4; Console.WriteLine(“Changed interface”); Console.WriteLine(“theStruct.Status: {0}, isTemp: {1}”, theStruct.Status, isTemp.Status);như chúng ta đã thấy kết quả thực hiện có một điểm khác biệt: Changed interface theStruct.Status: 2, isTemp: 4Điều xảy ra là: đối tượng được giao diện tham chiếu đến thay đổi giá trị status bằng 4,nhưngđối tượng giá trị cấu trúc không thay đổi.Thậm chí có nhiều thú vị hơn khi chúng tatruy cập phương thức thông qua bản thân đối tượng: // than đổi giá trị lần nữa theStruct.Status = 6; Console.WriteLine(“Changed object”); Console.WriteLine(“theStruct.Status: {0}, isTemp: {1}”, theStruct.Status, isTemp.Status);kết quả đối tượng giá trị thay đổi nhưng đối tượng được boxing và được giao diện thamchịếukhông thay đổi: Changed object theStruct.Status: 6, isTemp: 4Ta thử xem đoạn mã IL để hiểu tham về cách thực hiện trên: Ví dụ 8.7: MSIL phát sinh từ ví dụ 8.6.-----------------------------------------------------------------------------method private hidebysig static void Main() il managed{ .entrypoint // Code size 206 (0xce) .maxstack 4 .local ([0] value class myStruct theStruct, [1] class IStorable isTemp, [2] int32 V_2) IL_0000: ldloca.s theStruct IL_0002: iniobj myStruct IL_0008: ldloca.s theStruct IL_000a: ldc.i4.ml IL_000b: call instance void myStruct::set_status(int32) IL_0010: ldstr “theStruct.Status: {0}” IL_0015: ldloca.s theStruct IL_0017: call instance int32 myStruct::get_status() IL_001c: stloc.2 IL_001d: ldloca.s V_2 IL_001f: box [mscorlib]System.Int32 IL_0024: call void [mscorlib] System.Console::WriteLine (class System.String, class System.Object) IL IL_0029: ldloca.s theStruct _0 IL_002b: ldc.i4.2 02c: call instance void myStruct::set_status(int32)IL_0031: ldstr “Changed object”IL_0036: call void [mscorlib]System.Console::WriteLine (class System.String)IL_003b: ldstr “theStruct.Status: {0}”IL_0040: ldloca.s theStructIL_0042: call instance int32 myStruct::get_status()IL_0047: stloc.2IL_0048: ldloca.s V_2IL_004a: box [mscorlib]System.Int32IL_004f: call void [mscorlib]System.Console::WriteLine (class System.String, class System.Object)IL_0054: ldloca.s theStructIL_0056: box myStructIL_005b: stloc.1IL_005c: ldloc.1IL_005d: ldc.i4.4IL_005e: callvirt instance void IStorable::set_status(int32)IL_0063: ldstr “Changed interface”IL_0068: call void [mscorlib]System.Console::WriteLine (class System.String)IL_006d: ldstr “theStruct.Status: {0}, isTemp: {1}”IL_0072: ldloca.s theStructIL_0074: call instance int32 mySystem::get_status()IL_0079: stloc.2IL_007a: ldloca.s V_2IL_007c: box [mscorlib]System.Int32IL_0081: ldloc.1IL_0082: callvirt instance int32 IStorable::get_status()IL_0087: stloc.2IL_0088: ldloca.s V_2IL_008a: box [mscorlib]System.Int32IL_008f: call void [mscorlib]System.Console::WriteLine (class System.String, class System.Object, class System.Object) IIL_0094: ldloca.s theStruct L _IL_0096: ldc.i4.6 0IL_0097: call instance void myStruct::set_status(int32) 0IL_009c: ldstr “Changed object” a ...
Nội dung trích xuất từ tài liệu:
THỰC THI GIAO DIỆN phần 5Trong ví dụ 8.6, giao diện IStorable có một phương thức Read() và môt thuộc tính làStatus. Giao diện này được thực thi bởi một cấu trúc tên là myStruct: public struct myStruct : IStorableĐoạn mã nguồn thú vị bên trong Tester. Chúng ta bắt đầu bằng việc tạo một thể hiện củacấu trúc và khởi tạo thuộc tính là –1, sau đó giá trị của status được in ra:0 myStruct theStruct = new myStruct(); theStruct.Status = -1; // khởi tạo Console.WriteLine(“theStruct.Status: {0}”, theStruct.status);Kết quả là giá trị của status được thiết lập: theStruct.Status = -1;Kế tiếp chúng ta truy cập thuộc tính để thay đổi status, một lần nữa thông qua đối tượnggiá trị: // thay đổi giá trị theStruct.Status = 2; Console.WriteLine(“Changed object”); Console.WriteLine(“theStruct.Status: {0}”, theStruct.Status);kết quả chỉ ra sự thay đổi: Changed object theStruct.Status: 2 Tại điểm này, chúng ta tạo ra một tham chiếu đến giao diện IStorable, một đối tượng giátrị theStruct được boxing ngầm và gán lại cho tham chiếu giao diện. Sau đó chúng tadùng giao diện để thay đổi giá trị của status bằng 4: // gán cho một giao diện // boxing ngầm định IStorable isTemp = (IStorable) theStruct; // thiết lập giá trị thông qua tham chiếu giao diện isTemp.Status = 4; Console.WriteLine(“Changed interface”); Console.WriteLine(“theStruct.Status: {0}, isTemp: {1}”, theStruct.Status, isTemp.Status);như chúng ta đã thấy kết quả thực hiện có một điểm khác biệt: Changed interface theStruct.Status: 2, isTemp: 4Điều xảy ra là: đối tượng được giao diện tham chiếu đến thay đổi giá trị status bằng 4,nhưngđối tượng giá trị cấu trúc không thay đổi.Thậm chí có nhiều thú vị hơn khi chúng tatruy cập phương thức thông qua bản thân đối tượng: // than đổi giá trị lần nữa theStruct.Status = 6; Console.WriteLine(“Changed object”); Console.WriteLine(“theStruct.Status: {0}, isTemp: {1}”, theStruct.Status, isTemp.Status);kết quả đối tượng giá trị thay đổi nhưng đối tượng được boxing và được giao diện thamchịếukhông thay đổi: Changed object theStruct.Status: 6, isTemp: 4Ta thử xem đoạn mã IL để hiểu tham về cách thực hiện trên: Ví dụ 8.7: MSIL phát sinh từ ví dụ 8.6.-----------------------------------------------------------------------------method private hidebysig static void Main() il managed{ .entrypoint // Code size 206 (0xce) .maxstack 4 .local ([0] value class myStruct theStruct, [1] class IStorable isTemp, [2] int32 V_2) IL_0000: ldloca.s theStruct IL_0002: iniobj myStruct IL_0008: ldloca.s theStruct IL_000a: ldc.i4.ml IL_000b: call instance void myStruct::set_status(int32) IL_0010: ldstr “theStruct.Status: {0}” IL_0015: ldloca.s theStruct IL_0017: call instance int32 myStruct::get_status() IL_001c: stloc.2 IL_001d: ldloca.s V_2 IL_001f: box [mscorlib]System.Int32 IL_0024: call void [mscorlib] System.Console::WriteLine (class System.String, class System.Object) IL IL_0029: ldloca.s theStruct _0 IL_002b: ldc.i4.2 02c: call instance void myStruct::set_status(int32)IL_0031: ldstr “Changed object”IL_0036: call void [mscorlib]System.Console::WriteLine (class System.String)IL_003b: ldstr “theStruct.Status: {0}”IL_0040: ldloca.s theStructIL_0042: call instance int32 myStruct::get_status()IL_0047: stloc.2IL_0048: ldloca.s V_2IL_004a: box [mscorlib]System.Int32IL_004f: call void [mscorlib]System.Console::WriteLine (class System.String, class System.Object)IL_0054: ldloca.s theStructIL_0056: box myStructIL_005b: stloc.1IL_005c: ldloc.1IL_005d: ldc.i4.4IL_005e: callvirt instance void IStorable::set_status(int32)IL_0063: ldstr “Changed interface”IL_0068: call void [mscorlib]System.Console::WriteLine (class System.String)IL_006d: ldstr “theStruct.Status: {0}, isTemp: {1}”IL_0072: ldloca.s theStructIL_0074: call instance int32 mySystem::get_status()IL_0079: stloc.2IL_007a: ldloca.s V_2IL_007c: box [mscorlib]System.Int32IL_0081: ldloc.1IL_0082: callvirt instance int32 IStorable::get_status()IL_0087: stloc.2IL_0088: ldloca.s V_2IL_008a: box [mscorlib]System.Int32IL_008f: call void [mscorlib]System.Console::WriteLine (class System.String, class System.Object, class System.Object) IIL_0094: ldloca.s theStruct L _IL_0096: ldc.i4.6 0IL_0097: call instance void myStruct::set_status(int32) 0IL_009c: ldstr “Changed object” a ...
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin kỹ thuật lập trình ngôn ngữ lập trình ngôn ngữ C# C# THỰC THI GIAO DIỆN phần 5Gợi ý tài liệu liên quan:
-
52 trang 429 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 310 0 0 -
74 trang 294 0 0
-
96 trang 289 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 288 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 277 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 272 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 271 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 261 0 0