Es scheint mir wirklich keine Garantie dafür zu geben, dass eine nicht nullfähige Variable niemals null haben wird. Stellen Sie sich vor, ich habe eine Klasse mit einer Eigenschaft, die nicht nullbar ist:
public class Foo
{
public Foo(string test)
{
Test = test;
}
public string Test {get;set;}
}
Das scheint jetzt nicht null zu sein. Wenn wir diese Klasse jedoch mit einer anderen Bibliothek referenzieren, die keinen nullbaren Kontext verwendet, hindert nichts sie daran, dort null zu senden.
Ist das richtig oder gibt es vielleicht auch einige Laufzeitprüfungen, die dies sicherstellen?
c#
c#-8.0
nullable-reference-types
Ilya Chernomordik
quelle
quelle
public void Foo(string test){...}
oderpublic Foo(string test){...}
?Antworten:
Dies ist, was MS über sagt ( https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/upgrade-to-nullable-references#interfaces-with-external-code ):
quelle
jemand kann es immer tun
Möglicherweise können Sie Domain Driven Design verwenden
quelle
Sie haben Recht, anderer Code, der die neue Funktion nicht verwendet, könnte dieser Eigenschaft null zuweisen. Es gibt keine Laufzeitprüfungen. Es handelt sich lediglich um konformere Hinweise.
Sie können es jederzeit selbst tun, wenn Sie eine Laufzeitprüfung wünschen:
Beachten Sie, dass Sie garantieren können, dass der größte Teil Ihres Codes nicht null ist. Sie müssen lediglich Schutzmaßnahmen zu Ihrer öffentlichen API der obersten Ebene hinzufügen und sicherstellen, dass die Klassen ordnungsgemäß versiegelt sind.
Natürlich können die Leute immer noch Reflexion verwenden, um Ihren Code zu ficken, aber dann liegt es an ihnen
quelle
Of course people can still use reflection to f*** your code up
wahr, wahr in der Tat. Sie können definitiv Reflexion verwenden, um dies zu tun, wird empfohlen , nein , tun die Leute es immer noch, ja.Selbst in Ihrem eigenen Code können Sie, wenn Sie dies möchten
null
, mit dem Operator nullverzeihend übergeben.null!
wird in Bezug auf die Nullabilitätsanalyse des Compilers als nicht null betrachtet.quelle
Um mit Nullprüfungen umzugehen und Ihren Code auch lesbar zu machen, schlage ich das Null-Objekt-Entwurfsmuster vor.
Lesen Sie hier mehr:
https://www.c-sharpcorner.com/article/null-object-design-pattern/
Grundsätzlich wird ein neues Objekt erstellt, das von derselben Schnittstelle abgeleitet ist und eine Nullinstanz aufweist.
Beispiel:
Nullen können nicht vermieden werden, können jedoch sauber überprüft werden.
quelle