tôi nhận thấy rằng các biên dịch C# tạo ra một hướng dẫn ret
vào cuối void
phương pháp:Có cần phải có hướng dẫn thử trong ứng dụng .NET không?
.method private hidebysig static void Main(string[] args) cil managed
{
// method body
L_0030: ret
}
Tôi đã viết một trình biên dịch cho NET và nó hoạt động bất kể nếu tôi phát ra một ret
tuyên bố hay không (tôi' đã kiểm tra IL tạo ra và nó thực sự không có trong đó).
Tôi tự hỏi: Có phải ret
về phương pháp trả lại void
cần thiết cho bất kỳ điều gì không? Nó dường như không làm bất cứ điều gì với chồng, vì vậy tôi tin rằng nó hoàn toàn không cần thiết cho phương pháp void
, nhưng tôi muốn nghe từ một người biết nhiều hơn về CLR?
(tôi giả sử C# kẻ phát ra RET vào khoảng trống phương pháp bởi vì nó làm cho công việc của họ dễ dàng hơn: Chỉ có chức năng một phương pháp-phát trong trình biên dịch của họ được sử dụng cho các phương pháp vô hiệu và không void và chỉ cần luôn luôn phát ra thay vì kiểm tra nếu nó cần thiết. Tôi chỉ đoán mặc dù) –
bạn có thể sử dụng. NET phản xạ để xem nếu nó tạo ra bất kỳ bytecode khác nhau. Đoán của tôi là hoàn toàn không, bởi vì không có lý do cho nó. Đoán bạn đã đề cập trong bình luận của bạn cũng đúng. –
@Merlyn Không, không. Nếu tôi không phát hiện ra, không có ret được phát ra trong IL. –