Zauważyłem coś szczególnego w Visual Studio. Po pierwsze, spróbuj wpisać ten (C#) gdzieś w funkcji:Ostrzeżenie referencyjne programu Visual Studio - dlaczego nie wystąpił błąd?
class Foo
{
public void Bar()
{
string s;
int i = s.Length;
}
}
Teraz, od razu będzie to oznaczać s
w s.Length
jako błąd, mówiąc: „Use of unassigned local variable 's'
”. Z drugiej strony, spróbuj tego kodu:
class Foo
{
private string s;
public void Bar()
{
int i = s.Length;
}
}
To będzie kompilować i podkreślają s
w private string s
z ostrzeżeniem, mówiąc: „Field 'Foo.s' is never assigned to, and will always have its default value null
”.
Teraz, jeśli VS jest tak inteligentny i wie, że s zawsze będzie miało wartość NULL, dlaczego nie jest błędem, aby uzyskać jego długość w drugim przykładzie? Moje pierwotne przypuszczenie brzmiało: "Daje tylko błąd kompilacji, jeśli kompilator po prostu nie może wykonać swojej pracy, ponieważ kod technicznie działa tak długo, jak długo nie wywołuje Bar(), to tylko ostrzeżenie." Tyle tylko, że pierwsze wyjaśnienie unieważnia wyjaśnienie. Nadal można uruchomić kod bez błędu, o ile nigdy nie wywołasz Bar(). Co daje? Tylko niedopatrzenie, czy coś mi brakuje?
s nie jest globalny, jest instancją -pole. –