C#面向对象笔记
1.new创建对象,修改字段值,访问字段值,调用对象方法
对象.字段
对象.方法

2..封装
2.1私有化字段
private int age;
2.2定义属性提供get(访问),set(赋值)访问器对字段进行访问
public int Age
{
2.3在get,set访问器中添加代码保证数据安全
get{return age;}
set{
if(value>=0 && value<=100){
age=value;
}
else{
Console.WriteLine(“年龄超过范围,默认值设置为18岁”);
Age=18;
}
}
}

2.4访问

3.重载——同一个类中多个方法使用同一个名字
3.1条件
3.1.1同一个类中
3.1.2方法名相同
3.1.3参数类型或个数不同
3.2优势——体现在调用上,不需要记住更多的方法名,相同功能的方法传递不同的参数,编译器会明确的获知我们要调用那个方法


4.构造方法
4.1构造方法的名字必须与定义它的类名完全相同,并且没有返回值
4.2构造方法是在使用new关键字创建对象时系统自动调用的
4.3构造方法是在初始化对象时给对象成员赋初始值的
4.4通过构造方法可以实现创建对象同时对对象进行初始化,且构造方法也允许重载


5.集合
使用集合要导入对应的命名空间,System.Collections
集合类的Count属性用于获取存储对象的个数
6.列表集合ArrayList
6.1使用
6.1.1非常类似于数组,因其容量课按照需要的动态调整,且也是通过下标访问元素,也称之为动态数组
6.1.2 Capacity用于获取集合容量,Count用于获取集合中存储元素的个数
6.1.3与使用数组不同,创建ArrayList对象时,不需要指定容量,其容量会动态调整
6.1.4ArrayList中存储元素超出容量时,其容量将自动增长一倍
6.2常用方法
6.2.1添加元素:Add添加到ArrayList结尾处,Insert添加到ArrayList的指定索引处:list.Insert(索引位置,元素);




6.2.2删除元素:Remove(通过对象删除,对象存在,删除成功),RemoveAt(通过索引下标删除,list.RemoveAt(索引下标);),Clear(清空)

在ArrayList中,删除靠前元素,之后元素将自动向前移动
6.2.3排序:Sort(默认升序)反转Reverse
一起使用则降序

7.字典集合Hashtable
7.1在.NET中,Hashtable是用于处理key/value(键/值)对的集合容器。其中key通常用于快速查找,value用于存储对应于key的值,key区分大小写。
7.2Hashtable中键值均为object类型
7.3Keys包含Hashtable中所有键,Values包含Hashtable中所有值


7.4添加Add

7.5遍历foreach


7.6删除Remove

8.泛型 List、Dictionary
8.1将类型参数化的一种数据类型
8.2泛型是程序设计语言的一种特性,允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,并在使用前做出指明。

T表示类型

9.泛型集合List<T>
9.1C#中List集合与ArrayList集合在存储结构上、操作方法上以及所提供的方法上完全一致,只是使用List集合时需要指定数据类型,增强类型的安全性
9.2C#中的泛型包括泛型类、泛型接口、泛型方法等,但泛型最常用于集合类。System.Collections.Generic命名空间定义了许多泛型集合类,其中可以使用List<T>来代替ArrayList,Dictionary代替Hashtable,从而提高类型的安全性
9.3使用List<string>(T的类型被设置为string类型),会使所有的添加和查找方法使用string类型引用。这允许在编译时(而非运行时)指定和检查集合中元素类型
9.4使用
Goods类


购物车类


主方法


10.泛型字典集合Dictionary<K,V>
10.1Dictionary<K,V>
使用与Hashtable完全一致,唯一区别在于定义时须指定key,value的数据类型
10.2使用
商品类





主方法

运行结果

11.继承(:)
11.1在C#中,在子类的类名之后使用:实现继承
11.2C#中的继承,不仅可以使得子类自动拥有父类可被继承的成员,还可以定义自己所特有的成员
11.3使用
动物类


鸟类

主方法

12.继承的实现
12.1C#中继承的特点:
12.1.1传递性。即类B继承类A,类C继承类B,故类C具有类A和类B的成员
12.1.2单根性。一个类只能有一个父类,但可以有多个子类
12.1.3成员的访问性。除构造方法外的其他成员,均可以能被继承,只不过定义为private的成员不能被直接访问
12.2子类是对父类的扩展,可以在子类中新增成员,但不能去除已继承的成员
12.3在继承过程中,为了避免错误必须在父类手动添加无参构造方法
12.4 this和base关键字:在C#中,在子类中,可以使用this关键字访问本类成员,使用base关键字访问父类成员。
this():访问自身构造方法
this.成员名称:访问自身成员
12.5 is—a关系
12.5.1在继承关系中,子类和父类满足“子类is—a父类”的关系
12.5.2 C#中创建对象时,=左边可以为本类的类型,也可以为父类的类型
12.6在C#中,如果定义一个没有父类的类,则会自动继承object类
13.访问修饰符
- public:公有的,访问不受限制
- private:私有的,只能本类内部访问
- protected:受保护的,只能本类及其子类可以访问
- internal:内部的,只限于本项目内成员访问
- protected internal:内部保护的,只限于本项目或子类访问
14.多态
14.1多个不同的类对于同一个方法的不同实现
14.2C#中有两个选择:使用新的子类成员替换父类成员(方法隐藏),或者重写父类成员(方法重写)
14.3方法隐藏——子类方法添加new关键字
在方法隐藏中,调用父类的还是子类的方法,由=左边的引用所决定

14.4方法重写(使用更频繁)——父类方法使用virtual关键字,子类方法使用override关键字
重写方法时,子类和父类方法的返回值类型、方法名和参数必须完全相同,子类方法的可访问性不能低于父类方法
在方法重写中,调用父类的还是子类的方法,由=右边的创建对象所决定

15.密封类——不想被子类重写
15.1密封类使用sealed修饰,不能用作父类。因此,密封类主要用于防止派生子类。
15.2密封类可以用来限制类的扩展性。当程序中密封了某个类时,其他类不能从该密封类继承(不能被继承)
15.3sealed关键字可以修饰类和方法,通过sealed修饰的类称之为密封类,其方法被成为密封方法
15.4由于密封类不能被继承,所以类中的方法不能被定义为虚方法
15.5密封方法的使用
Sealed修饰方法时只能与override一起使用,防止重写的方法再次被重写

16.抽象类abstract
16.1抽象类可以不包含抽象方法,但是含有抽象方法的类必须定义为抽象类
16.2抽象方法不允许有方法体5
16.3子类继承于抽象类时必须重写抽象类中所有方法,除非子类也是抽象类
16.4抽象类不允许直接实例化,只能实例化其非抽象子类对象
16.5在子类中可以重写父类中两种方法,即抽象方法和虚方法。抽象方法和虚方法都是为了实现多态功能,其主要区别在于:抽象方法只提供一个功能名称,要求子类必须实现该功能;而虚方法不只提供功能名称还提供默认实现方式,子类可以不实现该功能。

17.接口interface
17.1C#中接口分为两类:自定义接口和开发平台提供的接口
17.2在定义接口时的注意
17.2.1接口名一般使用大写字母“I”开头,表明它是接口类型
17.2.2接口可包含方法、属性,但不能包含字段
17.2.3接口中定义的成员不允许有具体实现
17.2.4接口中的成员不允许加任何访问修饰符
17.3若需要对自定义的对象进行排序,那么该类必须实现IComparable接口
17.4一个类可以在继承其他类的同时实现多个接口,但是书写时类名在前,接口名在后


18.抽象类和接口的区别
18.1语法
18.1.1相同点
C#中抽象类和接口在使用上有很多相同点,如两者都不能实例化,都可以包含为实现的方法,其子类必须实现其为实现的方法
18.1.2不同点
|
抽象类 |
接口 |
|
使用abstract关键字 |
使用interface关键字 |
|
可以包含字段和已实现成员 |
不能有字段,只能包含未实现的成员 |
|
子类提供override实现抽象方法 |
子类直接实现所有成员 |
18.2使用场合
抽象类体现了一种继承关系,若想要使继承关系合理化,父类和派生类之间须存在“is—a”关系,即父类和派生类在概念、本质上应该是相同的
接口则不然,它并不要求接口的实现者和接口定义在概念、本质上一致,仅仅是实现和被实现的关系
19.文件对话框
19.1打开文件对话框OpenFileDialog
19.2保存文件的对话框SaveFileDialog
19.3文件夹浏览的对话框FolderBroswerDialog
19.4所有的对话框使用ShowDialog()方法,运行对话框,返回值为DialogResult类型
19.5OpenFileDialog对话框可通过FileName属性获取当前选择的文件路径
19.6FolderBroswerDialog对话框可通过SelectedPath属性获取当前选择的文件夹路径
20.文件常用操作
20.1文件管理是操作系统的重要组成部分,主要包括创建、移动、复制和删除等操作。C#中可以通过File类和FileInfo类方便的实现上述操作
20.2File为静态类只包含静态方法,不能被实例化,方法调用方便,但执行效率较低
20.3FileInfo为非静态类,必须创建对象。才能调用方法,但执行效率较高
20.4File类和FileInfo类均存在与System.IO命名空间中
20.5Move():将指定文件移动到新位置
21.文件夹常用操作
21.1文件夹管理是操作系统的重要组成部分,主要包括创建、移动和删除等操作,在C#中提供了Directory类和DirectoryInfo类用于对磁盘和文件夹进行操作管理
21.2Delete(string,bool):删除指定文件夹,为了保证删除成功,一般设置为true
21.3Move()将指定文件夹移动到新位置
22.文件读取和写入
22.1File类主要实现对文件基本操作,只能对文件实现创建、移动、复制和删除等操作,但不能对于文件中存储的数据进行读写操作,则需要借助C#中提供的流对象。使用FileStream类,StreamWriter类,StreamReader类
22.2文件和流的概念:
计算机文件是存储在某种长期存储设备上的一段数据流。
文件是在各种媒介上永久存储的数据的有序集合,是进行数据读写操作的基本对象,不同类型文件存储的数据形式不同。
流是一种向存储器读取和写入字节的方式,也是进行数据读写操作的基本对象。流提供了连续的字节流存储空间,其实际存储位置可以不连续,在C#中所有表示流的类都继承于抽象类Stream。
22.3文件读取和写入最常用的类:FileStream(文件流),StreamWriter(流写入器),StreamReader(流读取器)
22.4读写文件操作的基本步骤如下:
22.4.1创建文件流
22.4.2创建读、写器
22.4.3执行读、写器
22.4.4关闭读、写器
22.4.5关闭文件流
22.5文件操作相关的类都存在于System.IO命名空间中
22.6FileMode是枚举类型,用于指定打开文件的方式,常用取值:Create(创建新文件)、Open(打开文件)、OpenOrCreate(打开或创建文件)、Append(打开文件并追加内容)
22.7FileAccess是枚举类型,用于指定文件的访问格式,常用取值:Read(读文件)、Write(写文件)
22.8FileMode.Create和FileMode.CreateNew的区别:两者均为创建新文件,但所创建新文件存在时,Create将覆盖文件,CreateNew引发异常,所以使用CreateNew必须保证所创建的文件之前不存在
23.文本文件的局限性
23.1文本文件介绍与结构化数据存储:文本文件是微软在操作系统上附带的一种文本格式,是最常见的一种文件格式,早在DOS时代应用就很多,主要用于存储文本信息,即文字信息。微软在操作系统中直接保存,大多数软件可以直接查看文本文件
23.2为了保证数据读写的正确性,数据读取顺序必须与写入顺序一致
23.3文本文件存储对象存在的问题:
23.3.1写入和读取的过程比较繁琐,一旦对象成员进行修改,读写过程也要修改
23.3.2写入和读取的顺序必须一致,否则,将出现问题
23.4使用文本文件保存和读取信息时,读和写的顺序必须相同,否则赋值会出错
24.序列化和反序列化
24.1序列化是指将对象实例的状态存储到存储媒体中的过程。.NET框架通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。当已序列化的对象被反序列化时,该对象将被重新创建,并自动还原所有数据成员的值。要序列化的对象需要标记为Serializable特性
24.2在C#中,对象的序列化通过BinaryFormatter类实现,存在于System.Runtime.Serialization.Formatters.Binary命名空间

这篇笔记详细介绍了C#的面向对象特性,包括new关键字创建对象、封装、重载、构造方法、集合(ArrayList和Hashtable)、泛型(List<T>和Dictionary<K,V>)、继承、多态、访问修饰符、抽象类、接口以及文件操作。此外,还讨论了文本文件的局限性和序列化反序列化的概念。"
113350807,10295449,C#实现MysqlHelper类进行数据库操作,"['.net', 'mysql', 'sqlhelper']
1282





