Maison > développement back-end > C++ > Pourquoi certains cas C# et .NET Corner défient-ils les attentes ?

Pourquoi certains cas C# et .NET Corner défient-ils les attentes ?

Barbara Streisand
Libérer: 2025-01-24 18:02:14
original
686 Les gens l'ont consulté

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

Exploration des comportements inattendus en C # et .NET

La construction d'applications robustes nécessite une compréhension approfondie des cas de bord. C # et .NET, bien que puissant, présentent des scénarios surprenants qui remettent en question les hypothèses communes. Examinons quelques exemples illustrant ces comportements inhabituels:

lorsque new ne produit pas un nouvel objet

Considérez ce code apparemment simple:

<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>
Copier après la connexion

On peut s'attendre à ce que new crée toujours des objets distincts pour les types de référence. Cependant, la gestion spéciale de C # des chaînes vides conduit à x et y référençant le même objet.

types nullables et les NullReferenceException

Cet extrait de code met en évidence une interaction déroutante avec les types nullables:

<code class="language-csharp">static void Foo<T>() where T : new()
{
    T t = new T();
    Console.WriteLine(t.GetType()); // Throws NullReferenceException
}</code>
Copier après la connexion

Même si t est initialisé, l'appel GetType() lance un NullReferenceException. En effet, si T est un type nullable (comme int?), la boxe implicite à object peut entraîner une valeur nul, provoquant l'exception lorsque GetType() est appelé sur le Null en boîte.

Le cas de l'instance nul new

Ce scénario montre une possibilité moins intuitive:

<code class="language-csharp">public static void CanThisHappen<T>() where T : class, new()
{
    var instance = new T(); // new() on a ref-type; should be non-null
    Debug.Assert(instance != null, "How did we break the CLR?");
}</code>
Copier après la connexion

Les contraintes suggèrent que T est un type de référence instanable avec new. Cependant, des techniques telles que le télécommande (par exemple, l'utilisation d'un proxy qui renvoie NULL) peut contourner cette attente, ce qui entraîne l'échec de l'échec de l'affirmation. Cela met en évidence les complexités introduites lorsqu'ils traitent de fonctionnalités avancées comme le télécommande.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal