Heim >Backend-Entwicklung >C++ >Was sind einige unerwartete Eckfälle in C# und .NET?
Enthülle das Unerwartete: C# und .NETs verborgene Macken
Dieser Artikel untersucht einige überraschende Verhaltensweisen in C# und .NET, was die Notwendigkeit strenger Tests und sorgfältiger Berücksichtigung von Kantenfällen zeigt.
Ein faszinierendes Beispiel beinhaltet eine Schnittstelle zwischen String. Betrachten Sie diesen Code -Snippet:
<code class="language-csharp">string x = new string(new char[0]); string y = new string(new char[0]); Console.WriteLine(object.ReferenceEquals(x, y));</code>
intuitiv könnte man False
als Ausgang erwarten. Sowohl x
als auch y
sind jedoch als leere Saiten interniert, was zu einem überraschenden True
-Stalten führt.
Ein weiteres unerwartetes Verhalten entsteht mit nullbaren Typen und der GetType()
-Methode. Wenn T
ein nullierbarer Typ ist und alle überschriebenen Methoden (außer GetType()
) implementiert werden, kann das Aufrufen von GetType()
auf einer Boxed -Instanz ein NullReferenceException
.
<code class="language-csharp">static void Foo<T>() where T : new() { T t = new T(); // ... // This throws a NullReferenceException... Console.WriteLine(t.GetType()); }</code>
Darüber hinaus ist generische Einschränkungen, bei denen T
ein Referenztyp ist und einen Nicht-Null-Wert (T : class, new()
) eine subtile Herausforderung darstellt. Obwohl die new()
-Ebeltiere darauf abzielt, eine Nicht-Null-Instanz zu garantieren, kann dies beispielsweise mit einer Indirektion mit einem benutzerdefinierten Proxy-Attribut umgangen werden, das Null für neu erstellte Instanzen zurückgibt:
<code class="language-csharp">[MyFunnyProxy] class MyFunnyType : ContextBoundObject { }</code>
Diese Beispiele veranschaulichen das Potenzial für unerwartetes Verhalten innerhalb der C #- und .NET -Frameworks. Gründliche Tests und ein scharfes Bewusstsein für Randfälle sind für eine robuste und zuverlässige Anwendungsentwicklung von entscheidender Bedeutung.
Das obige ist der detaillierte Inhalt vonWas sind einige unerwartete Eckfälle in C# und .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!