本篇的内容繁多,且理解起来有哦一定的难度,但对于未来的编程来说这是十分重要的内容,把学习内容记录在此处,以便后面复习。
对于上篇的内容要清除了解以下问题: (1)值类型 //直接存储数据 (2)引用类型//存储数据的引用(内存地址) (3)方法执行在?//栈中,执行完毕清除栈帧 (4)局部变量的值类型//声明在栈中,数据存储在栈中 (5)局部变量的引用类型//声明在栈中,数据存储在堆中,栈中存储数据的引用 (6)区分修改的是栈中的存储的引用,还是堆中的数据//看赋值号的左边
int a;//存储在?//声明在栈中 a=1;//数据1存储在?//数据1存储在栈中
int[] arr01//存储在?//声明在栈中 arr01=new int[]{1,2};//数据存储堆中,arr01存储数据的引用
string[] arr02=new string[]{“ccf”}//引用类型存储引用,因此此处在堆中的string[]存储的程传发的引用 arr02=“thm”;//此处就是修改的就是堆中arr02[0]的引用,thm则是新开辟地址得到的,此时ccf成为垃圾
string name=“老王”;//name声明在栈中,存储为指向堆中老王的引用 name=“老孙”;//此处改的为堆中name的引用
枚举是一种数据类型 枚举本质是整形 枚举的好处是代码可读性更强,限定取值
列举某种数据的所有的取值 作用:增强代码的可读性,限定取值; 语法:enum名字{值1,值2,值3,值4} 枚举元素默认为int,准许使用的枚举类型有byte,sbyte,short,ushort,int,uint,long,ulong 每个枚举元素都是枚举值,默认情况下,第一枚举的值为0,后面的每个枚举的值依次递增1,可以修改值,后面枚举数的值依次递增。
可以同时赋多个枚举值 条件:任意两个枚举值做按位或运算的结果不能与其他枚举值相同 使用[Flags]特性标记枚举类型 选择多个枚举值,运算符|(按位或):两个对应的二进制位中有一个为1,结果位1 条件:1.任意多个枚举值做|运算结果不能与其他枚举值相同,值以2的N次方递增 2.定义枚举时,使用[Flags]特性装饰 判断标志枚举是否包含指定枚举值 运算符&(按位与):两个对应的二进制位中都为1,结果为1
语法: [Flags] enum 枚举类型名称 { 枚举值1=1, 枚举值2=2, 枚举值3=4, 枚举值4=8, 枚举值4=16, }
数据类型转换 int==>enum//强制转换 enum==>int//强制转换 string==>enum//(强制转换)Enum.Parse(typeof(),""); enum==>ToString()
面向对象:一种软件开发的思想,指导程序员如何分析,解决问题 类是一种抽象的概念,即为生活中的“类别” 对象是类的具体实例,即归属某个类别的“个体” 例如:学生是一个类,表示一种类型,八戒同学则是一个对象 名词类型的共性,作为数据成员(需要用变量存储数据的词) 动词类型的共性,作为方法成员
语法: 访问级别 class 类名 //类名首字母大写,各单词首字母大写 { 类成员… }
通常每一个类都在一个独立的C#源文件中 创建新的类意味着在当前项目中产生一个新的数据类型(引用类型)
语法: 类名 引用名; 引用名=new 构造函数(参数列表); 创建对象的过程叫实例化
this 这个对象(引用)
//声明wife类型的引用 Wife wife01; //指向Wife类型的对象(实例化Wife) Wife01=new Wife(); wife01.SetName(“ch”); wife01.SetAge(18);
用于修饰类及成员的访问可见范围 public:所属类的成员以及非所属类的成员都可以访问 private:只有所属类的成员才能访问[类成员的默认级别]
定义在类中方法外的变量 特点:具有默认值 所在类被实例化后,存在堆中,对象被回收时,成员变量从堆中被清除 可以与局部变量重名
值类型与引用类型 值类型 声明在堆中,数据存储在堆中 引用类型 声明在堆中,数据存储在堆中
字段:存储数据//首字母小写
保护字段(读取时保护,写入时保护)//属性首字母大写 private string name{ get{return name;}set{this.name=value;}//value关键字 } //私有变量,公开属性 对字段起保护作用,可以实现只读,只写功能 本质是对字段的读取与写入方法 语法: [访问修饰符] 数据类型 属性名
{ get{return 字段;}set{字段=value;}//value关键字 } 通常一个公有属性和一个私有字段对应 属性只是外壳,实际上操作的私有字段
包含一个字段两个属性 当属性访问器中不需要任何逻辑时,使用自动属性可以更加整洁 本质就是一个字段两个方法 语法: [访问修饰符] 数据类型 属性名{get;set;} 例如:pubic int Id{get;set;}
提供了创建对象的方式,常常用于初始化类的数据成员 本质:方法 一个类若没有构造函数,那么编辑器会自动生成一个无参数构造函数 一个类若具有构造函数,那么编辑器不会提供无参数构造函数 //构造函数的重载 如果不希望在类的外部被创建对象,就将构造函数私有化 特点:没有返回值,与类同名,创建函数时自动调用,不能被主动调用//如需调用可以用在其他构造函数后加“:this()” 语法: [访问修饰符] 类名([参数列表]){ 初始化 }
构造函数如果为字段赋值,属性中的代码块不会执行
表示当前对象的引用 访问当前类成员是,使用this关键字,可以提高代码的可读性,在没有歧义的情况下,不可以省略
访问级别 class 类名{
字段:存储数据 属性:保护数据 构造函数:提供创建对象的方式,初始化类的数据成员 方法:向类的外部提供某种功能 }
由于数组的弊端: 数组弊端 数组初始化必须指定大小 读写元素必须指定大小
因此有以下练习,实质时用本篇的内容自己实现一个list集合,代码将会另开一篇详细介绍 用户集合类 UserList
C#泛型集合 List<数据类型> Listlist01=new List(); list.Add(new User()); list.Insert(); list.RemoveAt();//指定索引删除 list.Remove();//得知元素删除 User u1=list01[0];//根据索引获取元素 //读取所有元素 for (int i = 0; i < list01.Count; i++) { User u = list01[i];
}字典集合//根据 查找 Dictionary<string, User> dic = new Dictionary<string, User>(); dic.Add(“ccf”, new User(“ccf”, “123”));//添加数据 User u2 = dic[“ccf”];//以ccf来查找
//不适合读取,快速地查找
本篇内容较多,所记录的内容可能有点杂乱,更多的是启发与个人观点,更多的详细的内容还要查阅书本以及网上的资料,最重要的是自己多敲代码运用体会。
