62 votes

Transtypage en objet dans la source de référence .NET

J'ai été en passant par la OperatingSystem.cs fichier dans le .NET de source de référence et de noter ce code dans la ligne 50:

if ((Object) version == null)

version est un objet de la classe Version, ce qui signifie version provient Object. Si c'est le cas, n'est-il pas redondant casting pour Object? Ne serait-il pas le même que celui de la?

if (version == null)

90voto

Jon Skeet Points 692016

Non, il n'est pas équivalent car Version surcharge l' == de l'opérateur.

L'extrait de code qui convertit l'opérande de gauche à Object est équivalent à:

if (Object.ReferenceEquals(version, null))

... plutôt que d'appeler l' operator== mise en œuvre en Version. Qui est susceptible de faire une nullité vérifier que sa première action de toute façon, mais cela contourne le niveau supplémentaire.

Dans d'autres cas, cela peut faire une différence très significative. Par exemple:

string original = "foo";
string other = new string(original.ToCharArray());
Console.WriteLine(original == other); // True
Console.WriteLine((object) original == other); // False

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X