带着问题去思考!大家好
引用类型有哪些方法比较相等性呢?栈集合和队列集合有啥子区别呢?泛型又有什么东西呢?
首先关于第一个问题,.NET的引用类型有4种方法比较相等性,其中3个方法继承System.Object基类,另一个就是==运算符。一般System.Object的派生类重写了虚拟的Equals方法,用于比较对象状态值,并同时重写了GetHashCode方法,用于返回标识该类唯一性的散列码
三种方法分别是Equals,静态Equals方法和静态ReferenceEquals方法,由于基类库的类型都派生System.Object类,这三种方法都用来比较对象之间是否指向堆上的相同对象,比较的是引用地址,如果相等返回TRUE,他们直接有什么区别呢?
1)静态的ReferenceEquals方法可接受两个object参数,用于比较两个引用类型的引用类型地址是否相同,结果返回Ture,否则false,如果有一个引用类型为null,则返回false,两个引用类型均为null。则返回true,该方法为静态方法,无法被重写.当然两种值类型变量比较用这个肯定是毫无意义,肯定返回false,而且会装箱2
2)虚拟的Equals方法是实例方法,由实例直接调用,用于比较引用类型的引用地址是否相等,不过其派生类一般将其重写为比较对象的状态值,即基于值的引用
3)静态的Equals方法和虚拟的Equals方法一样,
委托
CLR能够保证委托指向一个有效的方法,不会指向无效地址或者越界地址,
https://www.cnblogs.com/hushzhang/p/5901052.html这篇文章介绍的不错,
泛型容器
在之前高性能里面提到过Stack<T>,但未做详细解说,这里给大家讲解下
首先statck表示对象的简单后进先出(LIFO)非泛型集合,但是实际开发过程中不建议使用,更多的可以用Stack<T>,在高性能集合上面我们也有讲解过。
Stack<T>表示相同类型的实例可变大小的后进先出集合,
使用场景:一般是临时数据,需要同时多个线程访问集合,
注意:当元素添加到Stack<T>时,将根据需要通过重新分配内部数组来自动增加容量,可以通过调用TrimExcess来减少容量。Stack<T>接受null作为引用类型的有效值,并允许重复元素。