При понижении или повышении частоты ссылка на адрес и адрес памяти не изменяются.Это просто меняет способ, которым компилятор позволяет вам взаимодействовать с этим объектом.
> 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>
и сравнительное сравнение только в том случае, если больше ничего не возможно.