Một số câu hỏi học thuật, nhưng: Các loại giá trị như Int thực sự như thế nào hoạt động?Loại Giá trị thực sự hoạt động như thế nào trong .net?
Tôi đã sử dụng Trình phản xạ trên mscorlib để tìm hiểu cách System.Int32 được triển khai và nó chỉ là một cấu trúc kế thừa từ System.ValueType. Tôi đang tìm kiếm thứ gì đó trong số các dòng của một mảng bit giữ giá trị, nhưng tôi chỉ tìm thấy một trường được khai báo int - có nghĩa là nó là một tham chiếu vòng tròn?
Ý tôi là, tôi có thể viết "int i = 14;", nhưng số 14 cần phải được lưu trữ ở đâu đó bằng cách nào đó, nhưng tôi không thể tìm thấy "Mảng 32 bit" hoặc Con trỏ hay gì đó.
Đây có phải là một số phép thuật mà trình biên dịch thực hiện và các loại ma thuật này có phải là một phần của đặc điểm kỹ thuật không? (Tương tự như cách System.Attribute hoặc System.Exception là loại "đặc biệt")
Chỉnh sửa: Nếu tôi khai báo cấu trúc của riêng mình, tôi thêm trường vào đó. Các trường đó có kiểu tích hợp, ví dụ int. Vì vậy, CLR biết rằng tôi giữ một int. Nhưng làm thế nào nó biết rằng một int là 32-bit, đã ký? Có phải chỉ đơn giản là Đặc tả chỉ định một số loại cơ sở nhất định và do đó khiến chúng trở thành "ma thuật", hoặc có cơ chế kỹ thuật không? Ví dụ giả thuyết: Nếu tôi muốn khai báo một Int36, đó là một số nguyên với 36 bit, tôi có thể tạo kiểu hoạt động chính xác như Int32 (ngoài 4 bit phụ) bằng cách chỉ định "OK, đặt sang một bên 36 bit ", hoặc được xây dựng trong nguyên thủy đặt trong đá và tôi sẽ phải bằng cách nào đó làm việc xung quanh này (tức là bằng cách sử dụng một Int64 và mã mà chỉ đặt 36 bit cuối cùng)?
Như đã nói, tất cả đều rất khoa học và giả thuyết, nhưng tôi luôn tự hỏi về điều đó.
Câu hỏi hay, tôi đã tự hỏi bản thân mình là gì. – Pierreten
Tôi cũng vậy, tôi đã hy vọng câu hỏi là về cách các loại giá trị hoạt động, tức là stack vs heap được phân bổ, nhưng tôi tò mò về điều này. – Davy8
Chỉnh sửa của bạn: theo như tôi có thể nói, nếu bạn muốn tạo một Int36, bạn sẽ phải bằng cách nào đó mô tả nó trong C# hoặc IL, mà sẽ buộc bạn phải sử dụng Int32 + Int8 hoặc Int64 với 28 bit bị bỏ qua hoặc bất cứ điều gì. Cách duy nhất để thêm Int36 vào máy ảo nằm bên dưới và hiểu nó là biểu diễn mức bit sẽ thực hiện CLR riêng của bạn là la Mono hoặc Rotor. – itowlson