Không, biến cục bộ không có giá trị mặc định . Họ phải được chắc chắn được gán trước khi bạn đọc chúng. Điều này làm giảm cơ hội bạn sử dụng biến số nghĩ rằng bạn đã đưa ra một giá trị hợp lý, khi thực sự nó có một số giá trị mặc định. Điều này không thể được thực hiện ví dụ hoặc biến tĩnh bởi vì bạn không biết trong những phương pháp thứ tự sẽ được gọi.
Xem phần 5.3 của thông số C# 3.0 để biết thêm chi tiết về phân bổ xác định.
Lưu ý rằng điều này không liên quan gì đến việc này là biến loại tham chiếu. Điều này sẽ không biên dịch trong cùng một cách:
int i;
if (i == 0) // Nope, i isn't definitely assigned
{
}
Theo như ngôn ngữ là có liên quan, dù sao ... rõ vị trí lưu trữ trong bộ nhớ có một cái gì đó trong nó, nhưng nó không liên quan và thực hiện cụ thể. Có một cách bạn có thể tìm ra giá trị đó là gì, bằng cách tạo phương thức có thông số out
nhưng sau đó sử dụng IL để xem giá trị của tham số đó trong phương thức mà không phải đặt giá trị khác. CLR không bận tâm gì cả. Sau đó, bạn có thể gọi gọi phương thức đó chuyển qua biến không được gán chắc chắn và bạn có thể phát hiện giá trị - có khả năng là giá trị "tất cả số 0" về cơ bản.
Tôi nghi ngờ rằng đặc điểm kỹ thuật CLI thực hiện thực thi các biến cục bộ có giá trị mặc định - nhưng tôi phải kiểm tra. Trừ khi bạn đang làm những điều xấu xa như trên, nó không quan trọng với bạn trong C#.
Nguồn
2010-03-25 13:25:37
Tại thời điểm đó, Bar trỏ đến một vị trí trong ngăn xếp chứ không phải đống. Đó là lý do nó cần một giá trị –
Và các lớp học được khởi tạo trên heap phải không? Và cấu trúc không. Chính xác? – Snake
Nhưng mã được thực thi trong ngữ cảnh của Constructor –