вы допустили большую ошибку в своем первоначальном посте.Вы говорили о методе Equals()
в интерфейсе IDictionary
.В этом суть!
Equals () - это виртуальный метод System.Object
, который классы могут переопределять.Интерфейсы не реализуют методы вообще.Вместо этого экземпляры интерфейсов являются ссылочными типами, поэтому наследуются от System.Object
и , потенциально , объявляя переопределение Equals()
.
Теперь точка ... System.Collections.Generic.Dictionary<K,V>
делает не переопределить Equals.Вы сказали, что реализовали свой IDictionary по-своему и разумно переопределили Equals, но посмотрите на свой собственный код
Assert.AreEqual (backingDictionary, readOnlyDictionary);
Этот метод в основном реализован как return backingDictionary.Equals(readOnlyDictionary)
, и снова вот в чем дело.
Метод Basic Equals () возвращает false, если два объекта являются экземплярами разных классов, вы не можете это контролировать.В противном случае, если два объекта относятся к одному и тому же типу, каждый элемент сравнивается с помощью отражения (только члены, а не свойства) с использованием подхода Equals()
вместо ==
(то, что руководство называет «сравнение значений» вместо «Сравнение ссылок ")
Поэтому, во-первых, я не удивлюсь, если Assert.AreEqual (readOnlyDictionary,backingDictionary);
удастся, потому что это вызовет пользовательский метод Equals.
У меня нет сомнений, что другиепользователи в этой теме работают, но я просто хотел объяснить вам, в чем была ошибка в вашем первоначальном подходе.Конечно, Microsoft лучше бы реализовать метод Equals, который сравнивает текущий экземпляр с любым другим экземпляром IDictionary, но, опять же, он вышел бы за пределы области действия класса Dictionary, который является общедоступным автономным классом и не предназначен дляединственная общедоступная реализация IDictionary.Например, когда вы определяете интерфейс, фабрику и защищенный класс, который реализует его в библиотеке, вы можете сравнить класс с другими экземплярами базового интерфейса, а не с самим классом, который не является общедоступным.
Я надеюсь, что помог вам.Приветствия.