说我有
class Foo { }
class Bar : Foo { }
Bar
的成员之一polly
的实例类型为List<Foo>
的实例化对象List<Foo>.Contains(polly)
返回true还是false?
第二,当被称为基类和派生类时,对象是否保持相同的引用?
答案 0 :(得分:3)
向下或向上广播不会更改引用和内存地址。它只是改变了编译器允许您与该对象进行交互的方式。
> string fooString = "test"; ;
> object fooObject = fooString;
> bool areSameReference = object.ReferenceEquals(fooString, fooObject);
> areSameReference
true
第二个问题的答案是是。
第一个问题也将是是,假设Foo
未实现自定义比较逻辑,因为List<T>.Contains
使用EqualityComparer<T>.Default
会退回到{{1 }}和基于参考的比较只有在没有其他可能的情况下。