Кастинг на объект in.NET ссылку на источник


Я шел через OperatingSystem.cs файл в справочном источнике .NET и отметил этот код в линия 50:

if ((Object) version == null)

version является объектом класса Version, что означает version происходит от Object. Если это так, не является ли это избыточным приведением к Object? Разве это не то же самое, что и сейчас?

if (version == null)
1 63

1 ответ:

нет, это не эквивалентно-потому что Version перегружает == оператора.

фрагмент, который приводит левый операнд к Object эквивалентно:

if (Object.ReferenceEquals(version, null))

... вместо того, чтобы называть operator== реализации в Version. Это, вероятно, сделает проверку nullity в качестве своего первого действия в любом случае, но это просто обходит дополнительный уровень.

в других случаях это может иметь очень существенное значение. Например:

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