Будет ли полиморфный объект, приведенный к производному типу, иметь такое же ссылочное значение - PullRequest
0 голосов
/ 14 октября 2018

Скажем, у меня есть:

class Foo { }

class Bar : Foo { }

И экземпляр объекта типа Bar с именем polly, который является членом List<Foo>, List<Foo>.Contains(polly) вернет true или false?

И, во-вторых, поддерживает ли объект одну и ту же ссылку, когда упоминается как базовый класс и производный класс?

1 Ответ

0 голосов
/ 14 октября 2018

При понижении или повышении частоты ссылка на адрес и адрес памяти не изменяются.Это просто меняет способ, которым компилятор позволяет вам взаимодействовать с этим объектом.

> string fooString = "test"; ;
> object fooObject = fooString;
> bool areSameReference = object.ReferenceEquals(fooString, fooObject);
> areSameReference
true

Таким образом, ответ на второй вопрос: да .

Первый вопрос также будетa yes , при условии, что Foo не реализует пользовательскую логику сравнения, поскольку List<T>.Contains использует EqualityComparer<T>.Default, который откатится до ObjectEqualityComparer<T> и сравнительное сравнение только в том случае, если больше ничего не возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...