Đây là các chi tiết triển khai không có tài liệu của trình biên dịch và có thể thay đổi bất kỳ lúc nào. (CẬP NHẬT: Xem GeneratedNames.cs
trong các nguồn C # để biết chi tiết hiện tại; mô tả bên dưới hơi lỗi thời.)
Tuy nhiên, vì tôi là một chàng trai tốt, đây là một số chi tiết:
Nếu bạn có một biến cục bộ không sử dụng mà trình tối ưu hóa loại bỏ, chúng tôi vẫn gửi thông tin gỡ lỗi cho nó vào PDB. Chúng tôi đã gắn hậu tố __Deleted$
vào các biến như vậy để trình gỡ lỗi biết rằng chúng ở trong mã nguồn nhưng không được biểu diễn trong hệ nhị phân.
Các vị trí biến tạm thời được phân bổ bởi trình biên dịch được đặt tên với mẫu CS $ X $ Y, trong đó X là "loại tạm thời" và Y là số lượng tạm thời được phân bổ cho đến nay. Các loại tạm thời là:
0 --> short lived temporaries
1 --> return value temporaries
2 --> temporaries generated for lock statements
3 --> temporaries generated for using statements
4 --> durable temporaries
5 --> the result of get enumerator in a foreach
6 --> the array storage in a foreach
7 --> the array index storage in a foreach.
Các loại tạm thời từ 8 đến 264 là kho lưu trữ chỉ số mảng bổ sung cho các mảng đa chiều.
Các loại tạm thời trên 264 được sử dụng cho các thời gian tạm thời liên quan đến câu lệnh cố định sửa một chuỗi.
Các tên do trình biên dịch tạo đặc biệt được tạo cho:
1 --> the iterator state ("state")
2 --> the value of current in an iterator ("current")
3 --> a saved parameter in an iterator
4 --> a hoisted 'this' in an iterator ("this")
5 --> a hoisted local in an iterator
6 --> the hoisted locals from an outer scope
7 --> a hoisted wrapped value ("wrap")
8 --> the closure class instance ("locals")
9 --> the cached delegate instance ("CachedAnonymousMethodDelegate")
a --> the iterator instance ("iterator")
b --> an anonymous method
c --> anonymous method closure class ("DisplayClass")
d --> iterator class
e --> fixed buffer struct ("FixedBuffer")
f --> anonymous type ("AnonymousType")
g --> initializer local ("initLocal")
h --> query expression temporary ("TransparentIdentifier")
i --> anonymous type field ("Field")
j --> anonymous type type parameter ("TPar")
k --> auto prop field ("BackingField")
l --> iterator thread id
m --> iterator finally ("Finally")
n --> fabricated method ("FabricatedMethod")
o --> dynamic container class ("SiteContainer")
p --> dynamic call site ("Site")
q --> dynamic delegate ("SiteDelegate")
r --> com ref call local ("ComRefCallLocal")
s --> lock taken local ("LockTaken")
Mô hình để tạo ra các tên ma thuật là: P<N>C__SI
trong đó:
- P là CS $ cho các đại biểu được lưu trong bộ nhớ cache và các thể hiện lớp hiển thị, nếu không thì sẽ trống.
- N là tên gốc liên quan đến sự vật, nếu có
- C là ký tự từ 1 đến s được liệt kê ở trên
- S là một hậu tố mô tả ("hiện tại", "trạng thái", v.v.) để bạn không cần phải ghi nhớ bảng trên khi đọc siêu dữ liệu.
- Tôi là một số duy nhất tùy chọn