Bất cứ lúc nào bạn tạo một kiểu trong C#, nó sẽ tự động được điền vào với số 0 đệm. Trong trường hợp của một lớp (kiểu tham chiếu), điều này tương đương với một con trỏ null. Vì vậy, về mặt kỹ thuật, bất cứ lúc nào bạn đang làm việc với các lớp, sau đây là giống hệt nhau:
MyClass class;
MyClass class2 = null;
Với kiểu giá trị (bất kỳ cấu trúc, bao gồm int/float/đôi/etc), loại được thông qua với số không, vì vậy các nội dung sau tương đương:
int i;
int j = 0;
Tuy nhiên, trong một phương pháp, trình biên dịch sẽ kiểm tra xem bạn đã gán giá trị cho loại trước khi sử dụng hay chưa. Nếu bạn làm như sau, trình biên dịch sẽ phàn nàn:
int i;
Console.WriteLine{"{0}",i);
Về mặt kỹ thuật, ở trên nên được tốt - nhưng vì nó là một nguồn phổ biến của lỗi lập trình, trình biên dịch kiểm tra đặc biệt cho các biến cục bộ unassigned, và phàn nàn. Tuy nhiên, đây là khiếu nại biên dịch và không phải là vấn đề CLR. Bạn có thể làm cho IL làm điều đó ở trên, và nó chạy tốt.
Nguồn
2009-06-04 19:22:42
_Fields_ luôn được tự động khởi tạo thành giá trị mặc định của loại trường, trong trường hợp int là zero. Các lĩnh vực được coi là chắc chắn được giao; bạn có thể đọc nội dung của họ ngay cả trước khi phân công rõ ràng. _Locals_ không được coi là chắc chắn được giao; bạn được yêu cầu làm điều gì đó gán giá trị của một địa phương trước khi nội dung của nó được đọc. Xem phần "phân định xác định" của đặc tả C# để biết chi tiết. –