Спецификация С# - Раздел 1.6.7.5 может кто-нибудь объяснить этот пример?
Мне хотелось узнать больше о языке С#, и многие люди рекомендовали копаться в спецификации С#, поэтому я отправил и загрузил ее копию из MSDN и начал читать и просматривать примеры.
Спецификация С# Вводная часть - Раздел 1.6.7.5 Операторы
"Класс List объявляет два оператора: оператор == и оператор! =, и, таким образом, дает новое значение выражениям, которые применяют эти операторов для экземпляров списка. В частности, операторы определяют равенство двух экземпляров списка как сравнение каждого из содержащихся объектов, используя их методы Equals. В следующем примере используется параметр == оператора для сравнения двух экземпляров списка.
Я не понимаю, почему вывод будет True и False, в отличие от обоих False.
using System;
class Test
{
static void Main() {
List<int> a = new List<int>();
a.Add(1);
a.Add(2);
List<int> b = new List<int>();
b.Add(1);
b.Add(2);
Console.WriteLine(a == b); // Outputs "True"
b.Add(3);
Console.WriteLine(a == b); // Outputs "False"
}
}
Я вставляю это в Visual Studio, и я уверен, что у меня есть и Console.WriteLine() как " False", в отличие от обоих - "True" и "False", как указано в комментариях.
В нем также указано, что List-of-T объявляет один элемент события с именем Изменен, я не мог на всю жизнь найти его, я пошел в декомпилятор и тоже посмотрел.
Возможно, я полностью неправильно читаю его или у меня неправильная спецификация С#.
Ответы
Ответ 1
Этот отрывок не относится к System.Collections.Generic.List<T>
, а скорее к гипотетическому классу List<T>
, который появляется в разделе 1.6.7:
В следующей таблице показан общий класс, называемый List<T>
, который реализует растущий список объектов. Класс содержит несколько примеры наиболее распространенных типов членов функции.
Этот класс List
выполняет перегрузку операторов ==
и !=
для работы, как показано, имеет событие Changed
и т.д.
Ответ 2
List<T>
не предоставляет оператор ==
, поэтому по умолчанию он равен от object
, который является ссылочным равенством. Вы видите результат false
каждый раз (и каждый раз), потому что эти два списка не являются одинаковыми экземплярами и никогда не будут.