Dies ist wahrscheinlich eine einfache Erklärung hat zu sehen, ich bin versagt, aber warum ist der folgende Code legal:dynamisches Feld const gegen alle alten Referenzfeld const Verhalten
public struct Foo
{
const object nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
Während der folgenden
public struct Foo
{
const dynamic nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
gibt den folgenden Kompilierzeitfehler: Foo.ToString() ': nicht alle Codepfade geben einen Wert zurück?
Warum hat die Tatsache, dass nullObject
sein dynamic
macht der Compiler nicht in der Lage sein, zu behaupten, dass nullObject
immer null
sein wird?
EDIT: auf die Frage erweitern, und basierend auf smoore's Antwort, warum der Compiler erlauben dynamic
const
Felder zu beginnen? Ist es nicht Selbstbeseitigung? Ich weiß, dass dieses Szenario überhaupt keine wirkliche Anwendung hat und es ist ehrlich gesagt ziemlich sinnlos, aber ich bin zufällig auf sie gestoßen und bin einfach neugierig geworden.
'Warum erlaubt der Compiler das Starten von dynamischen const-Feldern?' Da es technisch möglich ist, 'const' auf alle Arten von Feldern anzuwenden. Wie bei jedem Feature lautet die Frage nicht "Warum haben sie dieses Feature nicht implementiert, das ich möchte?" es ist "warum sollten sie diese Funktion implementieren, die ich will?" In diesem Fall soll das Merkmal explizit verbieten, dass ein "const" -Feld "dynamisch" ist. Wie bei den meisten Feature-Anfragen wäre die Antwort höchstwahrscheinlich "es ist einfach nicht die Zeit und der Aufwand wert; es gab wichtigere Features hinzuzufügen". Das geht ziemlich weit weg, um dich in den Fuß zu schießen. – Servy