string s1 = “aaa”; //C#语法
String s2 = “bbb”;
int i1 = 10; //C#语法
Int32 i2 = 20;
1、 垃圾回收
目的:提高内存利用率
垃圾回收器:只回收托管堆中的内存资源,不回收其他资源(数据库连接、文件句柄、网络端口等)
什么样的对象才会被回收?
没有变量引用的对象。例:
Person p = new Person();
p.Age = 10;
Person p1 = new Person();
p = p1; //当执行完这句话,p对象已经没有任何变量指向了,可以被收回
什么时间回收?
不确定,当程序需要新内存的时候开始执行回收。
GC.Collect(); //手动调用垃圾回收器。不建议使用,垃圾回收有一系列的算法,需要移动对象等等,这时会暂停一下(非常短暂)应用程序,让程序自动去GC
垃圾回收器中“代”的概念:(共3代)垃圾回收采用代的概念,避免了每次垃圾回收都遍历所有的对象,减少了垃圾回收的时间。
第0代一开始创建的所有对象都是第0代
第0代回收频率最高,2代存活率最高
Dispose()释放除内存外的其他资源
析构函数在C#中叫Finalize()函数,在当前对象被垃圾回收之前会调用Finalize()。不能手动调用。既然Dispose()已经释放了其他内存,就不需要调用Finalize()了。
2、 弱引用:实例化对象占用内存较大、耗时较多的时候用
Person p = new Person();
p.Age = 18;
WeakReference wk =new WeakReference(p);
p = null; //当执行完这句话的时候,垃圾回收可以回收p对象,没回收通过弱引用就可以访问到p
object pnew = wk.Target;
if(pnew != null)
{
Console.WriteLine(((person)pnew).Age);
}
else
{
Console.WriteLine(“对象已经被回收!!!”);
}
3、 集合类之ArrayList(增、删、查、改、遍历)
3.1数组特点:类型统一、长度固定
3.2集合常用操作:添加、遍历、移除
3.3命名空间:System.Collections
3.4ArrayList
ArrayListarrList = new ArrayList();
//获取集合中实际存储的数据个数,类似于数组的Length
Console.WriteLine(arrList.Count);
arrList.Add(10);
arrList.Add(“yzk”);
arrList.Add(9.9);
arrList.RemoveAt(0);
3.4.1属性:
Count 表示实际的元素个数
Capacity表示当前集合的容量
3.4.2方法:
Contains()判断是否包含某值
TrimToSize()将总容量变成实际容量
AddRange()将数组直接增加到集合中
ToArray()将集合转为数组
4、 Hashtable
4.1比较各种查询方法的效率
遍历查询、计算查询
键的地址是算出来的,不是遍历查询的,所以效率高
4.2根据键取值
Hashtable hash = new Hashtable();
Person ac = new Person(){Name = “安超”};
hash.Add(ac.Name,ac);
Person hsd = new Person(){Name = “何圣东”};
hash.Add(hsd.Name,hsd);
Console.WriteLine(((Person)hash[“安超”]).Name);
Console.ReadKey();
4.3遍历Hashtable
Hashtable table = new Hashtable();
table.Add(“ac”,”anchao”);
table.Add(“hsd”,”heshengdong”);
table.Add(“ylr”,”yanglianren”);
foreach(DictionaryEntry item in table)
{
Console.WriteLine(item.Key+” ”+item.Value);
}
//单独遍历键
foreach(var item in table.Keys)
{
Console.WriteLine(item);
}
//单独遍历值
foreach(var item in table.Values)
{
Console.WriteLine(item);
}
5、 泛型集合(List、Dictionary)
5.1通过泛型可以限定集合中存储的数据类型
list.ToArray() 返回值类型变成了特定类型数组
5.2Dictionary
遍历:
5.2.1遍历键
foreach(Person item in dict.Keys)
{
Console.WriteLine(item);
}
5.2.2遍历值
foreach(string item in dict .Values)
{
Console.WriteLine(item);
}
5.2.3同时遍历键和值
foreach(KeyValuePair<Person,string>kv in dict)
{
Console.WriteLine(“键:{0},值:{1}”,kv.Key,kv.Value);
}
6、 C#中的关键字var 是一个类型推断,在程序编译的时候就已经替换成了对应的数据类型,是强类型。
作业:中英文转换、火星文翻译
思考:Dictionary有没有初始化器?