Heim >Backend-Entwicklung >C++ >Warum trotzen einige C #- und .NET -Eckfälle den Erwartungen?

Warum trotzen einige C #- und .NET -Eckfälle den Erwartungen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-24 18:02:14697Durchsuche

Why Do Some C# and .NET Corner Cases Defy Expectations?

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

erzeugt

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

ein Referenztyp mit

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn