Heim >Backend-Entwicklung >C++ >Warum trotzen einige C #- und .NET -Eckfälle den Erwartungen?
Erforschen unerwartete Verhaltensweisen in C# und .NET
Aufbau robuster Anwendungen erfordert ein tiefes Verständnis der Randfälle. C# und .NET sind zwar leistungsstark, aber einige überraschende Szenarien, die gemeinsame Annahmen in Frage stellen. Untersuchen wir einige Beispiele, die diese ungewöhnlichen Verhaltensweisen veranschaulichen:
Wenn new
kein neues Objekt
Betrachten Sie diesen scheinbar einfachen Code:
<code class="language-csharp">string x = new string(new char[0]); string y = new string(new char[0]); Console.WriteLine(object.ReferenceEquals(x, y)); // Prints True</code>
könnte man erwarten, dass new
immer verschiedene Objekte für Referenztypen erstellen. Die spezielle Handhabung von leeren Zeichenfolgen von C#führt jedoch zu x
und y
auf das gleiche Objekt.
Nullierbare Typen und die NullReferenceException
Dieser Code -Snippet zeigt eine rätselhafte Interaktion mit nullbaren Typen:
<code class="language-csharp">static void Foo<T>() where T : new() { T t = new T(); Console.WriteLine(t.GetType()); // Throws NullReferenceException }</code>
obwohl t
initialisiert wird, wodurch GetType()
ein NullReferenceException
aufgerufen wird. Dies liegt daran
T
int?
Der Fall der Null object
Instanz GetType()
Dieses Szenario zeigt eine weniger intuitive Möglichkeit:
new
Die Einschränkungen legen nahe, dass
sofort ist. Techniken wie Remoting (z. B. unter Verwendung eines Proxy, der NULL zurückgibt) können diese Erwartungen umgehen, was dazu führt, dass die Behauptung fehlschlägt. Dies unterstreicht die Komplexität, die beim Umgang mit fortgeschrittenen Funktionen wie Remoting eingeführt werden.
Das obige ist der detaillierte Inhalt vonWarum trotzen einige C #- und .NET -Eckfälle den Erwartungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!