Vì những mã IL này tôi thấy nhiều hơn, tôi thích tìm hiểu cách diễn giải chúng một cách chính xác.Cách tìm hiểu IL trên CLR
tôi không thể tìm thấy một tài liệu như C# Compiler hoặc bất kỳ khác vì vậy tôi nghĩ tôi khá nhiều có thể chăm sóc phần còn lại sau khi tôi học những phổ biến này:
Dưới đây là một số mã IL mẫu có chứa những gì tôi cần biết:
mẫu 1:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 15 (0xf)
.maxstack 1
.locals init ([0] class EnumReflection.DerivedClass derivedClass)
IL_0000: nop
IL_0001: newobj instance void EnumReflection.DerivedClass::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: callvirt instance void EnumReflection.DerivedClass::WriteOutput()
IL_000d: nop
IL_000e: ret
} // end of method Program::Main
mẫu 2:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 38 (0x26)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldstr "Hello"
IL_0006: stfld string EnumReflection.DerivedClass::hello
IL_000b: ldarg.0
IL_000c: ldstr "World"
IL_0011: stfld string EnumReflection.DerivedClass::world
IL_0016: ldarg.0
IL_0017: ldc.i4.s 123
IL_0019: stfld int32 EnumReflection.DerivedClass::age
IL_001e: ldarg.0
IL_001f: call instance void EnumReflection.BaseClass::.ctor()
IL_0024: nop
IL_0025: ret
} // end of method DerivedClass::.ctor
Tôi biết những gì các mã này làm kể từ khi tôi sản xuất chúng :-) tuy nhiên tôi muốn tìm hiểu thêm về mã IL tương ứng.
Các mẫu này chứa mã IL như, và bạn có thể giải thích lệnh bằng dấu hỏi không? và những lệnh đó cũng như thế nào? Vì vậy, chúng tôi có thể ghi nhớ chúng một cách dễ dàng.
- nop (để gỡ lỗi - không hoạt động)
- newobj (có vẻ như nó đang tạo ra đối tượng mới trong đống)
- stloc.0?
- ldloc.0?
- ret?
- ldarg.0?
- ldstr?
- stfld?
- ldc.i4.s?
- .ctor - constructor
Hiểu IL là quan trọng vì nó cho thấy cách đặc biệt trình biên dịch tạo ra mã số và hành động trong những trường hợp cụ thể.
Tuy nhiên, tôi không thể tìm thấy tài liệu hay có chứa các ví dụ về IL. CLR với C# 3.0 là một cuốn sách tốt tuy nhiên cuối cùng nó không phải là một cuốn sách IL vì vậy nó không giải thích tất cả mọi thứ về IL.
EDIT:
tôi đã tìm thấy các thông số kỹ thuật và họ nói với những: Nhờ @usr.
- nop (để gỡ lỗi - không hoạt động)
- newobj - tạo ra một đối tượng mới
- stloc.0 - Giá trị pop từ ngăn xếp để biến địa phương
- ldloc.0? - tải biến cục bộ lên ngăn xếp
- ret - return từ phương thức
- ldarg.0 - Tải đối số 0 lên ngăn xếp.
- ldstr - tải một chuỗi chữ
- stfld - cửa hàng vào một lĩnh vực của một đối tượng
- ldc.i4.s - Đẩy num vào stack như int32, hình thức ngắn.
- .ctor - constructor
để cử tri gần:.. tôi thay đổi nội dung câu hỏi của tôi ... – Tarik
tôi đã thay đổi tiêu đề tôi. nghĩ rằng đây là một câu hỏi hoàn toàn hợp lệ. – usr
@usr: Cảm ơn bạn đã thay đổi tiêu đề, nó su lại có vẻ tốt bây giờ. – Tarik