Tôi đã nhận thấy điều gì đó kỳ lạ về Visual Studio. Đầu tiên, hãy thử gõ lệnh (C#) ở đâu đó trong một hàm:Cảnh báo tham chiếu của Visual Studio null - tại sao không có lỗi?
class Foo
{
public void Bar()
{
string s;
int i = s.Length;
}
}
Bây giờ, ngay lập tức nó sẽ đánh dấu s
trong s.Length
như một lỗi, nói rằng "Use of unassigned local variable 's'
". Mặt khác, hãy thử mã này:
class Foo
{
private string s;
public void Bar()
{
int i = s.Length;
}
}
Nó sẽ biên dịch, và nhấn mạnh s
trong private string s
với một cảnh báo, nói rằng "Field 'Foo.s' is never assigned to, and will always have its default value null
".
Bây giờ, nếu VS là thông minh và biết rằng s sẽ luôn luôn là null, tại sao nó không phải là một lỗi để có được chiều dài của nó trong ví dụ thứ hai? Đoán ban đầu của tôi là, "Nó chỉ đưa ra một lỗi biên dịch nếu trình biên dịch chỉ đơn giản là không thể hoàn thành công việc của nó. Kể từ khi mã kỹ thuật chạy miễn là bạn không bao giờ gọi Bar(), nó chỉ là một cảnh báo." Ngoại trừ giải thích đó bị vô hiệu hóa bởi ví dụ đầu tiên. Bạn vẫn có thể chạy mã mà không có lỗi miễn là bạn không bao giờ gọi Bar(). Vì vậy, những gì cho? Chỉ là một sự giám sát, hay tôi đang thiếu một cái gì đó?
s không toàn cầu, nó là một ví dụ -cánh đồng. –