工做之中,咱们习惯了碰到任务就直接去实现其业务逻辑,可是C#真正的一些基础知识,在咱们长此以往不去了解巩固的状况下,就会忽视掉。我深知本身正一步步走向只知用法殊不知原理的深渊,因此工做之余,一直想找一些能深刻讲解C#基础知识和底层原理的书籍,有幸在网上看到了《.net之美》一书,(--张子阳做 )开始只是简单的作了阅读,可是越往下读,发现书中所述都是本身所薄弱或者是工做中遇到可是解释不清其原理的知识点,为了加深本身的印象,故萌生出写下读书笔记的想法,也是为本身的学习有个记录,方便往后查阅,加深理解。程序员
C#的类型共分为两种: 值类型和引用类型. 固然,区分他们的不一样是以其在计算机内存中的分配方式不一样面试
来划分的c#
a.做为引用类型的成员变量分配到“堆”上函数
b.做为方法的局部变量时分配到“栈”上学习
public class RefPoint { public int x; public RefPoint(int x){ this.x=x; } public RefPoint(){}; }
当仅声明不实例化时,RefPoint r1; 只在线程栈上建立一个不包含任何数据,也不指向任何对象 (不包含内存地址)的变量this
当使用new操做符实例化该变量时,r1=new RefPoint(1);将完成如下几件事.net
装箱就是将一个值类型转换成等价的引用类型,拆箱则是将一个已装箱的引用类型转换为值类型。线程
注:拆箱操做须要显示声明拆箱后转换的类型。由于拆箱装箱须要反复在内存堆上进行,所以,在咱们实际的程序应用中,应该避免没有意义的装箱和拆箱操做,以此来减小咱们的内存消耗。code
System.Object基类中,定义了实例方法Equals(object obj)、静态方法Equals(object objA,object objB)、静态方法 ReferenceEquals(Object objA,Object objB) 三种方法来判断两个引用类型是否相等。对象
做者给出了以上三种方法的具体实现,以下所示:
public static bool ReferenceEquals (Object objA, Object objB) { return objA == objB; // #1 } public virtual bool Equals(Object obj) { return InternalEquals(this, obj); // #2 } public static bool Equals(Object objA, Object objB) { if (objA==objB) { // #3 return true; } if (objA==null || objB==null) { return false; } return objA.Equals(objB); // #4 }
ReferenceEquals(),判断的是两个引用变量是否是指向了同一个变量,若是是,则返回true,这种相等就是引用相等。等同于==。
另外须要注意的就是 对于引用类型,即便类型的实例包含的值相等,可是若是变量指向的是不一样的对象,即引用值针的地址不相等,那么这两个变量也是不相等的。
简单值类型:值类型的成员仅包含值类型;
复杂值类型:值类型的成员包含引用类型;
值类型的判等,会调用System.ValueType的Equals()方法。方法内容简单的来说就是 先判断两个对象是否是同一个类型,若是不是,直接返回false,接着来判断对象内全部的字段,利用反射机制取到值类型的全部字段,遍历字段,进行字段与字段的比较。
浅度复制:对于值类型成员,会复制其自己;对于引用类型成员,仅仅复制引用,而不在堆上从新建立对象。结果就是 新对象的引用成员和复制对象的引用成员指向了同一个对象。
相对的,深度复制:就是将引用成员指向的对象也进行复制。过程就是建立新的引用成员指向的对象,而后复制对象中所包含的数据。
对象的原子性:对象的状态是一个总体,若是一个字段改变,其余字段也要同时作出相应改变。
如何实施?? 添加一个构造函数,在构造函数中为对象的全部字段赋值。
对象的常量性:对象的状态一旦肯定,就不能再次更改了。若是想再次更改,须要从新建立新的对象。
如何实施??可将属性中的set访问器删除,同时将字段声明为readonly只读状态。
做者在这一章节主要讲解了C#中的类型,包括值类型和引用类型,以及简单类型和拆箱装修的过程,以及后续的对象判等、深浅复制及对象的一些特性等。经过对此章节的阅读,加深并巩固了我对于C#这些基础概念的理解,大学确定也学过这些,可是随着步入工做后,慢慢接触到的都是工做中的业务逻辑处理了,关心的也是业务逻辑该如何实现等,不多再有精力去回过头了解基础的一些知识点。
今天上午还在网上看到某个大佬发布的一篇博文,大概意思就是30+的程序员面试的一些过程,看完感受感触很深,虽然我今年27,离30+也不远了,可是工做中,总感受本身一旦闲下来就很慌,是那种不知所措的内心慌,很想去看点关于基础知识点的书籍,可是一看到知识点概念就看不进去了,偶尔还有其余事情要忙,只能草草收场,等到下次再想起来的时候,已经记不清上次本身看到哪里了,因此写下这篇文章也是为了防止本身再放弃,算是给本身一个鼓励吧。
曾经问过一位博主大佬,为何文章写的那么好,感受什么都能拿来做文章的素材,再看看本身,虽然也在努力,可是没有目标,没有方向。2020年也快过完了,去年定下的目标也忘的差很少了,就但愿接下来的时间里,能抓紧时间,充实本身吧。