转换为派生类型的多态对象是否具有相同的参考值

时间:2018-10-14 19:25:31

标签: c# polymorphism

说我有

class Foo { }

class Bar : Foo { }

Bar的成员之一polly的实例类型为List<Foo>的实例化对象List<Foo>.Contains(polly)返回true还是false?

第二,当被称为基类和派生类时,对象是否保持相同的引用?

1 个答案:

答案 0 :(得分:3)

向下或向上广播不会更改引用和内存地址。它只是改变了编译器允许您与该对象进行交互的方式。

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

第二个问题的答案是

第一个问题也将是,假设Foo未实现自定义比较逻辑,因为List<T>.Contains使用EqualityComparer<T>.Default会退回到{{1 }}和基于参考的比较只有在没有其他可能的情况下。