Prawdopodobnie ma proste wyjaśnienie mam uszkodzoną zobaczyć, ale dlaczego jest następujący kod prawna:dynamiczny const pole vs. dowolnym stare pole odniesienia zachowania const
public struct Foo
{
const object nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
Choć dodaje,
public struct Foo
{
const dynamic nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
podaje następujący błąd czasu kompilacji: Foo.ToString() ": nie wszystkie ścieżki kodu zwracają wartość?
Dlaczego fakt, że nullObject
jest dynamic
powoduje, że kompilator nie może potwierdzić, że nullObject
będzie zawsze null
?
EDIT: Rozwijając na pytanie oraz na podstawie smoore's odpowiedź, dlaczego kompilator pozwoli dynamic
const
pola zacząć? Czy to nie jest rodzaj samoobrony? Wiem, że ten scenariusz nie ma prawdziwego zastosowania i jest zupełnie bezsensowny, ale natknąłem się na niego przez zwykły wypadek i po prostu byłem ciekawy.
'dlaczego kompilator zezwala na uruchamianie zmiennych dynamicznych? 'Ponieważ technicznie pozwala on na zastosowanie' const' do dowolnego typu pola. Podobnie jak w przypadku każdej funkcji, pytanie nie brzmi: "dlaczego nie wdrożyli tej funkcji, której chcę?" "dlaczego mieliby wdrożyć tę funkcję, której chcę?" W tym przypadku funkcja polega na wyraźnym zakazie, aby pole 'const' było' dynamic'. Podobnie jak w przypadku większości żądań funkcji, najprawdopodobniej odpowiedź brzmiałaby: "po prostu nie jest warta czasu i wysiłku, a do dodania ważniejszych funkcji". To całkiem nie pasuje, aby strzelić sobie w stopę. – Servy