20200117 .net 001
第一部分:面向对象 封装 继承(里氏转换) 多态
第二部分:值类型、引用类型、字符串操作
第三部分:集合文件操作
第四部分:正则表达式
第五部分:xml操作
第六部分:委托、事件
第七部分:反射。
1、变量的命名
首先我们要保证的就是变量的名称一定要有意义(就是我们看到了变量的名字,就知道变量在这段程序中的作用)
camel:多余用给变量或者字段命名,第一个单词的首字母小写,其余每个单词的首字母大写。
我们给字段命名,前面必须加下划线。
_highschoolstudent
pascal:要求我们每个单词的首字母都要大写,其余每个单词的首字母小写。
highschoolstudent
int max= getmax();
int min= getmin();
2、进程
一个应用程序就是一个进程,而一个进程又是由多个线程组成的。
进程帮助我们在内存中分配应用程序执行所需要的空间。
//存储着我们当前正在运行的进程
//process[] pro = process.getprocesses();
//foreach (var item in pro)
//{
// //item.kill();不试的不是爷们
// console.writeline(item.processname);
//}
//使用进程来打开应用程序
//process.start("notepad");//打开记事本
//process.start("mspaint");//打开画图工具
//process.start("iexplore", "http://www.baidu.com");
//process.start("calc");//打开计算器
//使用进程来打开文件
//封装我们要打开的文件 但是并不去打开这个文件
processstartinfo psi = new processstartinfo(@"c:\users\springrain\desktop\打开文件练习.exe");
//创建进程对象
process pro = new process();
//告诉进程要打开的文件信息
pro.startinfo = psi;
//调用函数打开
pro.start();
console.readkey();
---->
我们可以通过进程来直接操作应用程序。
3、面向对象复习
类决定了对象将要拥有的属性和行为。
class basefile
{
//字段、属性、构造函数、函数、索引器
private string _filepath;
public string filepath//ctrl+r+e
{
get { return _filepath; }
set { _filepath = value; }
}
//自动属性 prop+两下tab
public string filename { get; set; }
public basefile(string filepath, string filename)
{
this.filepath = filepath;
this.filename = filename;
}
//设计一个函数 用来打开指定的文件
public void openfile()
{
processstartinfo psi = new processstartinfo(this.filepath + "\\" + this.filename);
process pro = new process();
pro.startinfo = psi;
pro.start();
}
}
封装:
--->减少了大量的冗余代码
--->封装将一坨很难理解的功能封装起来,但是对外提供了一个很简单的使用接口。我们会使用就ok。
继承:
--->减少了类中的冗余代码
--->让类与类产生了关系,为多态打下了基础。
特性:
单根性:一个子类只能有一个父类
传递性:爷爷类 爹类 儿子类
里氏转换:
1、子类可以赋值给父类
2、如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象
---->关键字
1、is:返回bool类型,指示是否可以做这个转换
2、as:如果转换成功,则返回对象,否则返回null
作用:我们可以将所有的子类都当做是父类来看,针对父类进行编程,写出通用的代码,适应需求的不断改变。
多态:
--->虚方法
virtual override
--->抽象类
abstract override
--->接口
interface
4、关键字
new
1、创建对象
--->在堆中开辟空间
--->在开辟的堆空间中创建对象
--->调用对象的构造函数
2、隐藏父类的成员
this
1、代表当前类的对象
2、显示的调用自己的构造函数
base
1、显示调用父类的构造函数
2、调用父类的成员
5、抽象类实现多态练习
模拟将外部的移动存储设备插到电脑上进行读写数据。
u盘
read()
write()
移动硬盘
read();
write();
mp3
read();
write();
playmusic();
手机....平板电脑......
6、接口
---->接口是一种能力
---->接口也是一种规范
---->如果你继承了这个接口,就必须按照接口的要求来实现这个接口。
interface i开头...able结尾
7、石头剪刀布案例
玩家
--->出拳的方法,是我们指定的
电脑
--->出拳的方法,随机的
裁判
--->判断输赢或者平手
石头1 剪刀2 布3
玩家赢:石头1 剪刀2 =-1 剪刀2 布3 =-1 布3 石头1=2
平手:玩家-电脑=0;
电脑赢:
8、访问修饰符
public private internal protected protected internal
public:在哪都可以访问
private:私有的,只能在当前类的内部进行访问
internal:只能在当前程序集中访问。
protected:受保护的,可以在当前类以及该类的子类中访问
注意点:
1、能够修饰类的访问修饰符只有两个:public internal(默认就是internal)。
2、在同一个项目中,public的权限跟internal是一样的。
3、子类的访问权限不能高于父类。
1、导入命名空间
命名空间就是类的"文件夹"。类就是"文件夹"中的文件。需要导入命名空间
添加引用:
如果我需要在一个项目中,访问另一个项目中的某一个类
--->添加对另一个项目的引用
--->导入命名空间
2、静态和非静态
静态成员:被static修饰
实例成员:不被static修饰
静态成员先于实例成员被加载到内存中,只有创建了对象,才有实例成员。
静态类中只能存在静态成员
调用:
静态成员调用:
类名.静态成员名;
实例成员调用:
实例名.实例成员;(实例就是我们的对象)
什么时候使用静态?
---->作为工具类
---->在整个项目中资源共享,正因为它是资源共享的,所以静态成员必须要等到整个项目都结束的时候
才会被资源释放。
在我们的项目中应该尽可能的少使用静态成员。
继承是创建对象的过程。
3、设计模式
---->单例设计模式
在整个程序中,我们要保证对象必须是唯一的。
实现:
---->第一步:构造函数私有化
---->第二步:声明一个静态字段,作为全局唯一的单例对象
---->第三步:声明一个静态函数,返回全局唯一的对象
---->简单工厂设计模式
核心:把所有的子类都当做父类来看待
练习:
提示用户分别的输入两个数字:
再输入运算符:返回一个计算的父类,并调用方法得到结果。
add sub cheng chu
建筑行业最早应用到设计模式这个概念
1、注册一个公司
2、招兵买马
3、投标买地
4、安排施工队开始施工
5、卖楼
设计模式就是用来专门解决一些特定的问题。
4、类库
.dll文件,我们使用类库来帮助我们封装一些常用的功能
5、值类型和引用类型
值类型:int double char bool decimal struct enum
引用类型:string 数组 自定义类 接口 委托
值类型的值存储在内存的栈上,引用类型的值存储在堆中。
栈上存储数据的效率要高于堆。
值传递:把值类型作为参数传递,把值本身进行传递。
注意:
ref可以把值传递改变为引用传递。
引用传递:把引用类型的值作为参数传递,传递的是引用。
6、字符串的学习
重要特性:
不可变性,我们不管对字符串做什么操作,都会在内存中产生一块新的实例。
驻留池
我们可以将一个字符串看作是char类型的只读数组。
gc:garbage collection垃圾回收 ,每隔一段时间,会扫描整个内存,发现,如果有的空间没有被指向。则立即把它销毁。
1、stringbuilder
它就是拼接字符串的一个工具,拼成完成后,还是需要将它转回字符串。
2、ref参数
ref参数侧重于将一个值带到函数中进行改变,再讲改变后的值带出去。ref参数在函数内不用赋值
函数外必须为ref参数赋值。
3、out参数
4、params可变参数
5、集合的学习
非泛型集合
arraylist
hashtable
泛型集合
list<t>
dictionary<tkey,tvalue>
6、装箱和拆箱
装箱:值类型---->引用类型
拆箱:引用类型--->值类型
我们判断是否发生了拆箱或者装箱,首先要判断这两种数据类型是否存在继承关系。
你装箱的时候拿什么类型装的箱,你拆的时候,就得拿什么类型去拆。
7、list<t>常用的函数
add():添加单个元素
addrange():添加一个集合
insert():插入一个元素
insertrange():插入一个集合
remove():移除指定的元素
removeat():根据下标移除元素
removerange():移除一定范围内的元素
toarray():集合转换成数组
tolist():数组转换成集合
8、编码格式
将字符串是怎样的形式保存为二进制。
ascii 256
6000 gb2312
gbk gb18030
iso
unicode
utf-16
utf-8
出现乱码的原因:我们保存这个文件的时候采取的编码跟打开这个文件的时候采取的编码格式不一致。
文本文件:拖到txt中还能看得懂得就是文本文件。
上一篇: Linux 权限管理