c#知识梳理

时间:2022-06-21 07:59:55

本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦学习了一年,一直没有机会梳理一下自己的知识,最近花了一些时间整理了一些C#基础知识,也算是对过去的一年做个回顾把~

文章有点长,请自带瓜子和茶吧,请看下面C#基础知识简单架构图,不可能100%的全面,请见谅啊... 

1.值类型和引用类型

  1.1堆和栈

  简单的说值类型存放在堆栈上面,引用类型的数据存放在托管堆上面(它的引用地址却存放在堆栈上面)!

  栈:它是一个内存数组,是一个先进后出的数据结构!

  栈的特征:数据只能从栈顶进,从栈顶出!

  堆:它是一个内存区域,可以分配大块区域存储某类型的数据,与栈不同的是它里面的数据可以任意排序和移除!

  下面是园子的一张图,贴上来供大家参考啊!

问     题值  类  型引 用 类 型
这个类型分配在哪里?   分配在栈上   分配在托管堆上  
变量是怎么表示的?   值类型变量是局部复制   引用类型变量指向被分配得实例所占的内存  
基类型是什么?   必须继承自System.ValueType   可以继承自除了System.ValueType以外的任何类型,只要那个类型不是sealed的  
这个类型能作为其他类型的基类吗?   不能。值类型是密封的,不能被继承   是的。如果这个类型不是密封的,它可以作为其他类型的基类  
默认的参数传递是什么?   变量是按值传递的(也就是,一个变量的副本被传入被调用的函数)   变量是按引用传递(例如,变量的地址传入被调用的函数)  
这个类型能重写System.Object.Finalize()吗?   不能。值类型不好放在堆上,因此不需要被终结。   可以间接地重写  
我可以为这个类型定义构造函数吗?   是的,但是默认的构造函数被保留(也就是自定义构造函数必须全部带有参数)   当然!  
这个类型的变量什么时候消亡?   当它们越出定义的作用域时。   当托管堆被垃圾回收时。  

  1.2装箱和拆箱

    关于装箱和拆箱是一个老生常谈的话题,也有很多文章来分析它,如:1. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱 2. 值类型的装箱与拆箱浅析 3. 深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别

    

  这类的文章真的多了,再总结就没多大的意义了,看的时候多写写代码,多想想,就会明白的!

2.接口,抽象类,封装,继承,多态

  接口和抽象类这两个概念还真不容易理解,有的时候理解一半,换一种方法考考你,你就会晕,到现在说实话我还没完全懂,一直没有把握它们的精髓,最近在看<<你必须知道的.NET>>,这是第二次看,收获很多...

  大家还是有时间多看看<<你必须知道的.NET>>,这本书可以说是很详细的讲解了OO思想,还有看看设计模式的书,多想多练,可以时间会长一点,不过总有一点我们会开窍的...

  这种东西不是通过总结一下就能熟练运用的,不过你起码要有一点面向对象的思想,要想有这种思想必须学习前辈留下的知识总结,这种才能理论结合实践,才能深入的了解OO思想

  推荐文章:细细品味C#——抽象、接口、委托、反射(感谢虾皮老师啊...)

3.迭代器

  主要是对foreach的深入理解,以及对两个接口的深入剖析(包括它们的泛型结构):IEnumerable(可枚举类型),IEnumertor(可枚举数),文章入口:使用IEnumerable和IEnumerator接口,从yield关键字看IEnumerable和Collection的区别

4.泛型

  泛型保证了类型安全,避免了装箱和拆箱的操作,提高了性能,可复用性也得到了很大的提高,下面就来说说基本的泛型语法吧!