本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦学习了一年,一直没有机会梳理一下自己的知识,最近花了一些时间整理了一些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.泛型
泛型保证了类型安全,避免了装箱和拆箱的操作,提高了性能,可复用性也得到了很大的提高,下面就来说说基本的泛型语法吧!