Tôi đã tự hỏi tại sao trong C# sử dụng tên biến được sử dụng trước đây trong phạm vi con không được phép. Như thế này:Sử dụng tên biến được sử dụng trong phạm vi con
if (true)
{
int i = 1;
}
int i = 2;
Biên dịch mã trên tạo ra một lỗi:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
Tuy nhiên bạn không thể sử dụng các biến được định nghĩa trong phạm vi con một trong hai. Đoạn mã trên hoạt động tốt trong Java và tôi không thể thấy lý do tại sao nó không có trong C#. Tôi chắc chắn có một lý do chính đáng, nhưng nó là gì?
Tôi thực sự nghĩ rằng sẽ có một lý do "thực sự", bởi vì tôi thực sự không thể hiểu tại sao mọi người lại chọn lựa như thế. : D Nhưng tôi thấy quan điểm và thật tuyệt khi biết tại sao. – Carlos
khilon: Tôi thực sự nghĩ lý do thực sự là lý do tôi đề xuất; ^) – Toad
@Carlos fyi, lý do _real_ là tất cả các khai báo biến được chuyển lên đầu phạm vi của chúng tại một thời điểm nào đó (biên dịch hoặc JIT). Do đó, thứ tự các phạm vi của bạn liên quan đến các khai báo của bạn rất ít, xung đột phạm vi con/tổ tiên sẽ luôn là xung đột trong thời gian chạy. Trình biên dịch từ chối nó trước. – Gusdor