C#OOP笔记
1.0 Microsoft.NET的概述
微软:操作系统,办公软件,数据库,.net
.net 2000年微软公司向全球宣布其革命性的软件和服务平台
必须依赖Microsoft 否则用不了微软的产品
1.1为什么要使用.net框架
C#程序可以在不同平台(Pad、 Phone、 PC) 的环境中运行吗? 使用C#程序可以调用VB.NET开发的程序吗?
可以同时开发多个程序 有大量的类库
.net Framework版本
1.0 1.1 2.0 3.0 3.5 4.0 4.5
1.2.net 框架的魅力
面向对象编程
提高软件可复用,可扩展,易维护性,灵活性
强大的动态web支持
DELL官网销售网站,中国海关,Myspace ,火车定票系统 (Microsoft框架开发的网页)开发速度快
1.3.net Framework框架概述
.NET战略的基础框架 .NET程序的运行环境 强大的类库
1.5.Microsoft.NET框架两个组成部分
ADO.NET的组件:
\1. DataSet
\2. Framework数据提供程序
.NET的组件
\1. 公共语言运行时CLR
\1. 框架类库FCL
2.0.NET框架核心
vb.net c# f# ironRuby others ...语言
.net Framework类库(FCL)
公告语言运行时 (CLR) 对各种语言进行统一
操作系统
2.1.net框架组件
使用不同语言整合 公共语言运行时 他交给CLS和CTS整合 可以招收不同的开发人员开发程序(Java不可以)
2.2公用语言运行时
CLR:公共语言运行时 提供所有.NET应用程序运行的环境
VB语言F#语言------>Microsoft.NET编译中间语言代码(MSIL)-------->即使编译器(JIT)--->平台专用语言--->代码被执行 ===一共编译两次 MSIL代码 = 即使编译器
2.3公共运行时的两个组成部分(掌握)
CTS(公告语言运行时)
称为通用类型系统 定义了在IL中的的数据类型
CLS(不同的语言整合)
称为公共语言规范 包括几种面向对象的编程语言的通用功能
2.4.net类库
使用泛型 System.Collections.Generic 对文件的基本操作 System.I0 对网络协议进行编程 System.Net 对数据库的访问 System.Data 开发Windows应用程序 System.Windows.Forms 对GD|+基本图形的操作 System.Drawing
2.5总结
ADO.NET的组件: 1、DataSet 2、Framework数据提供程序
.NET的重要组件: 1、公共语言运行时CLR 2、框架类库FCL
公共语言运行时CLR的组成部分: 1、CTS通用类型系统 2、CLS公共语言规范
C#程序编译过程 VB语言F#语言(各种语言)------>Microsoft.NET编译中间语言代码(MSIL)-------->即使编译器(JIT)--->根据不同的平台生成平台的专用语言--->代码被执行 ===一共编译两次 MSIL代码 = 即使编译器 第一次编译:各种语言整合 第二次编译:根据不同的平台生成平台的专用语言
3.0面向对象
3.1封装
是面向对象3三大特征:之一 一个不可分割的独立实体 隐藏内部的细节 保留对外接口 通过访问修饰符授权
将字段封装成prviate
3.2封装-类
类时一个最基本的封装
3.3封装的好处(掌握)
保证数据安全性 提供清晰的对外接口 类内部实现可以任意修改,不影响其他类
3.5快速入门
//创建类的三步 1、写类名 2、写属性---> 属性类型属性名称; 3、写方法
//使用类的三步 创建对象给属性赋值 调用对象方法 1、实例化对象(创建对象) 类名称 引用=new 类名称(); 2、为属性赋值 对象名称.属性名=值; 3、调对象方法 对象名称,方法名();
3.6完整属性
private string_ name; 11姓名 public string Name { get{ return_ name; }//删除只能写入 set{ _ name = value; }//删除只能读取
}
优点:如果不使用get 可以删除
3.6自动属性(掌握) 首字母大写 快捷键prop+tab+tab
public string Name {get;set;}
自动属性缺点:get set一个都不能少
警告:字段名小写,属性名大写
4.0案例魔兽登陆注册
/*//**发现类 用户user //发现属性(注册,增加,修改,**查询列表) 姓名name,身份证号idenitiyNum,密码password,**邮箱email //**发现方法 无 //**封装*/
//**属性 /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 身份证号 /// </summary> public string IdenitiyNum { get; set; } /// <summary> /// 密码 /// </summary> public string Password { get; set; } /// <summary> /// 邮箱 /// </summary> public string Email { get; set; }
*//mLogin**窗口*
//**定义数组 //**初始化数组 //**加载事件 //**单击登陆事件 //..
第二章深入C#数据类型(理解)
1.0 值类型
1.0.1 基本数据类型
| 数据类型 | Java | 最小值和最大值 | 范例 |
|---|---|---|---|
| 整形 | int | 小-2,147,483,648 大2,147,485,647 | |
| 浮点型 | float | 小 32768 大32767 | |
| 双精度型 | double | 小 大 | |
| 布尔型 | bool | true false | |
| 枚举类型 | 枚举 | ||
| 字符串 | string | 无限 | |
| long | long | 小-9,223,372,036,854,775,808 大9,223,372,036,854,775,807 | |
| 字符 | char | 1个字符 | |
| 字节 | byte | 1个字节 |
1.0.2 如何判断是值类型或引用类型:根据长度大小 值类型的大小有限,
值类型:大小有限制
引用类型:没有限制
值类型给值类型赋值=复制
1.1 值类型的特点:
会在内存中开辟一个空间,
值类型一个地方改变另一个地方不会改变
1.2 引用类型
1.2.1 引用类型的特点
引用类型一个地方改变另一个地方也会改变
引用类型的复制:地址的赋值
1.2.3 引用类型的内存空间
new一个对象会开辟2个空间
• 地址空间
• 数据空间
1.5 结构struct(理解)
将引用类转换成值类型
给public 后面的class 改为struct
1.5.3 结构的特点
\1. 在结构中不能有初始化的字段
\2. 值类型提前速度快,引用类型性能低,但是局限造成内存溢出
\3. 引用类型节省内存,值类型浪费内存并且能造成内存溢出
小提示,在企业开发中,一般都追求内存,不追求性能,内存能省则省
\4. 使用了struct结构,可以不用new(如int,double....使用其他报错)
1.6 转型
其他转string 3种方法
\1. Convert.ToString();
\2. num.TO=oString();
\3. String.Format();
特点: 转型性能低(尽量少转)
1.6.1 装箱,拆箱
值类型转引用类中 = 装箱
引用类型转值类型 = 拆箱
小提示(装拆箱在实际开发中尽量少用)
警告:
`引用类型一个地方改变另一个地方也会改变`
引用类型一个地方改变另一个地方也会改变
1.6.2 ref转引用类型
在基本类型前面增加ref
1.6.5 案例:
项目经理评分:
/* 分析: 发现类:员工类 属性:姓名,工号,年龄,评价judeg,得分source 方法:无 封装类: */
1.7 总结
| 掌握部分 |
|---|
| 值类型,引用类型, |
| 值类型的特点: |
| 引用类型的内存空间: |
| 引用类型的特点: |
| 结构的特点: |
第三章 集合(掌握)
1.0 集合的概念:
• 集合原本是数学上的一个概念,表示一组具有某种性质的数学元素
• 引用到程序设计中表示一组具有相同性质的对象。集合好比容器,将一系列相似的组合一起,是一个特殊的类,和数组一样,可以通过索引访问集合成员,不同的是,集合的大小可以动态调整,可以在运行时添加或删除元素。
• 集合中包含的对象称为集合元素。集合分为泛型集合类和非泛型集合类,泛型集合类一般位于System.Collections.Generic名称空间,非泛型集合类位于System.Collections名称空间。此外,System.Collections.Specialized名称空间中也包含一些有用的集合类。
1.1 为什么要使用集合:
数组的局限性:
数组的长度空间是固定的,每次有一个新的元素,就要重写创建一个数组,若吧数组的长度定义很大,很浪费内存,
缺点:调整大小困难,增加元素困难,删除元素时位置不会补齐位置就空了,
优点:提取速度快
解决办法:集合
1.2 ArrayList集合(不推荐使用)
所有的集合都是可动态维护长度的集合
跟数组一样拥有索引,可以根据索引查询元素删除元素,跟数组一样下标从0开始,删除数据自动补齐
性能:提前速度慢(但可以忽略不记)
装拆箱性能太低了
类型不安全
1.2.1 快速入门(一般不使用详细在下面)
\1. :手动引入命名空间
– using System.Collections;
\2. :实例化对象
\3. :使用集合,操作元素
– 增加元素:ArrayList.Add(Object value);//返回值索引位置
– 访问元素:(类型转换比如String)ArrayList[索引];
– 删除元素:
– 插入数据
1.3 泛型集合
1.3.1 List<泛型>集合(常用掌握)
list集合是一个类型安全的集合
List<类型> list = new List<类型>();
-
:实例化对象
List<泛型> 变量 = new List(这里也可以指定长度);
-
:使用集合,操作元素
增加元素:List.Add(Object value);
访问元素:List[索引];
• 遍历:(提示ArrayList=声明的集合变量)
• //for**遍历,类似于数组
for(int i=0; i < ArrayList.Count; i++){ 类型 变量 = ArrayList[i]; cw(变量); }
• //foreach**遍历 foreach(Object(类型) obj in ArrayList){ 类型 变量 = obj; cw(变量); }
删除元素:
• List.Remove(对象);//删除指定对象(没有则跳过)
• List.RemoveAt(index);//删除指定索引的对象(没有则报错)
• List.Clear();//清除集合内的所有元素
– 插入数据
• List.Insert((指定位置),数据)
案例: 发现类: 员工Employee 属性: 工号... 方法: 无 步骤(新)
-
定义员工集合
-
初始化员工集合
-
加载事件...
-
-
模糊查询 临时集合(查询) 单击事件 获取用户输入数据,循环遍历找到了,往临时集合仍,最后刷新临时集合的数据 当网格视图结果发生变化时 ,针对有增删改绑定网格视图 网格视图.DataSource = new BindingList<泛型>(临时集合);
当网格视图结果发生变化时 ,针对有增删改绑定网格视图 网格视图.DataSource = new BindingList<泛型>(临时集合);
1.4 Hashtable集合(不使用)
为什么要使用Hashtable:
list集合的局限性,如果找某一个员工,数据很多的情况下,如果不记得索引,使用索引不方便查 询,那就可以使用Hashtable集合,
特点:
类型不安全不推荐使用
key和value的形式存储数据,没有下标,使用key获取value,
key不能重复
foreach遍历时需要指定键或者值
1.4.1 快速入门
//**引入命名空间 using System.Collections; //**实例化对象 Hashtable nums = new Hashitable(); //**操作数据 nums.add("1",1); //**循环遍历 foreach(Object num in nums.values){ cw(num); }
增加:添加元素使用Add(key键,value值);
删除:Hashtable.Remove("key");
清空:Hashtable.Clear();
查询:Hashtable["key"];
注意:如果没有查询到就是空
是否包含(返回值bool):Hashtable.ContainsKey(key)
1.5 字典集合Dictionary
(字典)发音:带可审内瑞
特点:
类型安全
key和value的形式存储数据,没有下标,使用key获取value,
key不能重复
foreach遍历时需要指定键或者值
1.5.1 快速入门(和Hashtable使用相似)
//**实例化对象 Dictionary<String,int> nums = new Dictionary<...>(); //**操作数据 nums.add("1",1); //**循环遍历 foreach(Object num in nums.values(key)){ cw(num); }
增加:添加元素使用Add(key键,value值);
删除:Dictionary.Remove("key");
清空:Dictionary.Clear();
查询:Dictionary["key"];
注意:如果没有查询到就是空
是否包含(返回值bool):Dictionary.ContainsKey(key)
1.5.5 范例
#region 删除单击事件 private void tsbtnDelete_Click(object sender, EventArgs e) { //**判断是否选中行 if (dgvProgrammer.SelectedRows.Count == 0) { return; } DialogResult dr = MessageBox.Show("你确定要删除吗?", "提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning); if (dr == DialogResult.No) { return; } //**获取数据网格视图选中的值 int id = dgvProgrammer.SelectedRows[0].Cells["workNo"].RowIndex; //**删除 employees.RemoveAt(id); MessageBox.Show("删除成功", "提示"); //**刷新数据 BindingShow(); } #endregion;
获取当前时间Time.Now
1.6 总结
不管是什么集合,类型不安全一般不使用,
-
类型安全:Dictionary,List
-
类型不安全:Hashtable,ArrayList
list集合,
-
根据下标索引查数据,
-
可以使用for循环和foreach遍历,
-
操作删除单独时2种方法,根据索引删除(没有找到对象名则报错),根据对象名删除(没有找到对象名则不删除),
Dictionary集合,
-
根据key查询数据,
-
foreach循环遍历需要指定获取键或者值,不能使用for循环遍历因为没有索引
-
操作删除只能根据对象名进行删除
-
查询若没有查询到数据,会报错
什么时候使用什么集合呢??
第四章深入类的方法(掌握)
1.1 构造函数
实例化对象时会隐式的调用构造函数
主要作用:为属性赋值
1.1.3 构造函数的特点:(重要)
-
不能有返回值,留空
-
构造函数名必须跟类名保持一致
-
构造函数可以重载不可以重复
-
一个类可以有多个构造函数,要区分的话就看参数的数量和参数的类型,被称为方法的重载
-
当一个类中没有构造参数,系统会自动分配一个无参构造
-
构造函数不能被直接调用,必须通过new关键字在创建对象时才会被调用
-
一般无参构造函数和有参构造函数一起写
1.2 构造函数快速入门
1.2.2 有参构造函数
public 类名([属性]参数...){
this.[形参]=属性; (this代表当前实例对象 在这里区分局部变量和全局变量)
}
1.2.4 无参构造函数
public 类名(){}
快速入门
1.发现类 2.发现属性 3.发现方法 4.封装构造函数,属性,方法
无参 public Student(){} 有参 public Student(int id,int age String name){ this.Id = id; this.Age = age; this.Name = name; }
1.3 方法重载
1.3.1 概念
在C#中多个方法可以共存,但是方法的参数不能一模一样,这就叫做方法的重载
符合方法重载:
• 在一个类中
• 构造函数名相同
• 参数不同(位置,数量)
1.3.5 快速入门
public void eat(){}
public void eat(int food){}
1.5 案例:
体验套餐管理系统
发现类:
套餐
项目
发现属性:
套餐:名称、价格、体检项目(字典集合)
项目:名称、描述、价格
发现方法:
套餐:计算价格(遍历体检项目中每个项目的价格相加)
项目:无
封装:构造函数,属性,方法
main窗口加载事件
//体检项目集合
//初始化集合
//加载事件...
第六章 继承和多态(掌握)
继承(掌握)
继承概述
里氏替换原则,用类中共有的,替换
满足子可以替代父
语法:public class 子类:父类{}
继承的特征
单根性(只能有一个父类)
传递性(多级继承)
继承
多关注父,少关注子
能声明父,不声明子
父能待的地方,子也能待
子类继承父类
• 属性
• 方法
this和base
this 调用当前这个类
base 调用父类
继承构造参数
public 类名(参数)
:base(父类属性,父类属性)
{
子类特有的属性....
}
注意的特点
构造函数是不能被继承的:
父类中必须包含构造函数:子类的无参构造函数隐式的调用了父类的无参构造函数
案例:
1、发现类
电池Batteryl
交流电ACPower
笔记本Ccmputer
2、发现属性(注册、增加、修改、查询列表)
电池:无
交流电:无
笔记本:品牌Brand
3、发现方法
电池:供电GivePower
交流电:供电
笔记本:显示信息ShowInfo
4、发现父、子
父:电源
供电
子:电池、交流电
5、找关系
笔记本包含电池和交流电
6、封装构造函数、属性、方法
多态(*)
多态入门
多态特点
对于同一个方法,不同的对象会产生不同的结果
让对象智能化的直到自己该做什么
多态的应用
父类作为一个类的属性
父类作为一个类方法的参数
方法的重写和重载(掌握)
方法的重载
在同一个类中,方法名相同,参数不同
方法的重写
在父子类中实现,方法名相同,参数相同,返回值相同
override 在修饰符 返回值的中间增加
抽象类(掌握)
-
抽象方法和虚方法的区别:
虚方法有方法体
抽象方法没有方法体
-
创建抽象类在修饰符后面加:abstract
-
可以包含普通方法,虚方法,抽象方法
-
列举一个类的行为,没有具体的实现方式
-
抽象类不能被new
-
抽象类不能是密封类,或静态的(了解)
抽象方法(掌握)
-
修饰符后面写abstract**就是抽象方法**
-
什么时候需要抽象方法?
当方法没有具体的实现方式(不需要方法体的时候)
-
定义抽象方法之前,类也必须是抽象类
-
只提供行为,不提供具体的实现方式,具体的实现方式交给子类去做
-
抽象方法必须被子类重写,除非子类也是抽象的
虚方法
必须有方法体
可以不被重写
案例:
饲养员小李喂动物 猴子吃香蕉 狗狗吃骨头 兔子吃萝卜
发现类:饲养员,猴子,狗,兔子 属性: 饲养员:姓名 猴子:无 狗:无 兔子:无 行为: 饲养员:喂食物 猴子:吃 狗:吃 兔子:吃 继承关系 父类:动物 吃 子类:猴子,狗,兔子 关系:无 ...
第八章XML
概述
跨平台,数据交互,跨操作系统,又被称为轻量级的数据库
可扩展性标记语言,xml用于描述数据
注释
<!- -->
快速入门
C#-->创建项目>数据>xml
== 头文件 描述版本信息和字符集(不能删)
特点
• 注意:xml严重区分大小写
• 根级别标签,只能由一个,子节点是可以重复的
自定义标签
<student>
<name>张三</name>
<age>25</get>
<name>李四</name>
<age>25</get>
</student>
注意:xml注释,使用时会被解析,为空行
解析xml步骤
将xml路径放到debug根目录:右上角显示全部文件-->CTRL+x,剪切粘贴
*//**引入命名空间*
using System.Xml;
*//**创建XmlDocument**对象*
XmlDocument doc = new XmlDocument();
*//**将文件加载*
dos.Load("相对路径/或绝对路径");
*//**获取根节点*
XmlNode root = doc.documentElement;*//**这里有个继承关系* *先声明父不声明子,**左父,**右子*
*//**根据需求进行解析 foreach**遍历*
foreach(XmlNode childRoot in root.ChidNodes){
cw(childRoot.IndexXml):
}
根节点下的子节点下的获取数据
//...*
*//**根据需求解析*
foreach(XmlNode node in root.ChildNodes){
String name = node["name"].InnerXMl;
String age = node["age"].InndexXml;
...
}
foreach (XmlNode childRoot in root.ChildNodes)
{
String name = childRoot["name"].InnerXml;
String age = childRoot["age"].InnerXml;
String gender = childRoot["gender"].InnerXml;
*//**判断*
Console.Write("姓名是:{0},", name);
Console.Write("年龄是:{0},", age);
Console.WriteLine("性别是:{0},", gender);
}
*//**根据需求解析*
foreach(XmlNode node in root.LastChild.ChildNode){*//**最后一个子节点的子节点*
}
String myShoolName = root.FirstChild.InnerXml;
案例:
数字有效性判断
int.TryParse(num1, out newNum1); 将某个数据转型到某个地方 (返回值bool类型 转型成功true失败false)
第九章文件流
概述讲义
为什么要使用io流?
关于文件的读写,复制删除修改,
使用有什么好处?
有些数据可以替代数据库的使用,可以不依赖数据库,读写数据
缺点: 不舍和
使用前要注意几点?
操作文件路径的时候,\转义符需要屏蔽 ,@或\
写=set,读=get
枚举类
类和类名之间加enum
a = 1, b =2,c =3
快速入门
\1. 引入命名空间: using System.IO;
\2. 创建文件流: FileStream myfs = new FileStream(String path文件路径,FileMode FileMode.指定如何打开文件);
– FileMode枚举
• Create:创建一个新文件。如果文件存在,则改写旧文件
• Open :指定打开现有文件。指定的文件必须存在,否则出现异常
• CreateNew:新建一个文件。如果文件存在发生异常,提示文件已经存在
• Append:打开现有文件追加
\3. 创建写入器和读取器StreamWriter,StreamReader
– 文本文件写入器
• StreamWriter mySw = new StreamWriter(myfs传入文件流);
– MySw.Write(content); //写入方法
– MySw.WriteLine(content); //写入一行数据的方法
– 文本文件读取器
• StreamReader mySr = new StreamReader(myfs);//这里给一个文件写入器
– content = mySr.ReadToEnd(); //读取文件到末尾
– content = mySr.ReadLine(); //读取一行
\4. 数据操作
– read.ReadToEnd(); //读取全部 包括空格
– 循环读取
• while (){}
– 写入
\5. 释放资源
– mySw.Close();
– mySr.Close();
– 提示:如果用了多个流或者读取器,关闭他们的周期是:被创建的顺序相反即可.
范例:
文件写入内容:
*//**创建文件流*
FileStream stream = new FileStream("A:\\a.txt", FileMode.Append);
*//**创建写入器*
StreamWriter writer = new StreamWriter(stream, Encoding.Default);
*//**执行操作*
Console.Write("请输入录入信息:");
String str = Console.ReadLine();
*//**写入文件*
writer.WriteLine(str);
Console.WriteLine("录入成功");
*//**关闭写入流*
writer.Close();
*//**关闭文件流*
stream.Close();
文件读取内容:
String path = "A:\\a.txt";
*//**文件流*
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
*//**文件读写器*
StreamReader read = new StreamReader(stream, Encoding.UTF8);
*//**执行操作读取全部*
String content = read.ReadToEnd();
Console.WriteLine(content);
*//**关闭流*
read.Close();
stream.Close();
解决乱码问题
在读取器的第二个参数,即可设置编码Encoding.UTF-8
文件操作常用方法等
| 方法 | 说明 |
|---|---|
| bool Exists**(string path)** | 用于检查指定文件是否存在,该方法返回一个布尔值 |
| void Copy(string sourceFileName string destFileName) | 将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,则在指定路径中新建一个文件 |
| void Move (string sourceFileName, string destFileName) | 将指定文件移动到一个新的路径 |
| void Delete**(string** path) | 删除指定的文件**,如果指定的文件不存在,则不引发异常** |
实例:
//判断文件是否存在
String path = ..;
bool result = File.Exists(path);
//复制文件
File.Copy(原路径,目标路径); //2个参数都是String类型
//剪切文件
File.Move(原路径,目标路径);
//删除文件
File.Delete("删除路径");
目录操作
| 方法 | 说明 |
|---|---|
| bool Exists**(string path)** | 用于检查指定文件夹在磁盘上是否存在 |
| void Move (string sourceDirName, string** destDirName) | 用于**将文件或目录及其内容移到新位置** |
| void Delete**(string path,** bool recursive) | 删除指定目录,如果**bool指定true,则删除子目录中的所有目录内容** |
| void Delete**(string path)** | 从指定路径删除空目录 |
范例:
//移动
Directory.Move(path, "A://b");
Console.WriteLine("移动成功");
//删除
Directory.Delete(path);//删除空目录
Console.WriteLine("删除成功");
Directory.Delete(path, true);//删除整个目录文件
Console.WriteLine("删除成功");
静态与非静态
静态类是什么,为什么要用它?
使用前要注意什么?
静态的 需要使用类调用
静态类和非静态类
public static class Directory 和 public static class File
| 静态类 | 非静态类 |
|---|---|
| 用static修饰 | 不用static修饰 |
| 只包含**静态成员** | 可以包含静态成员 |
| 不可以包含实例成员 | 可以包含实例成员 |
| 使用类名调用静态成员 | 使用实例对象调用非静态成员 |
| 不能被实例化 | 可以被实例化 |
| 不能包含实例构造函数 | 包含实例构造函数 |
静态成员和非静态成员
public static 变量类型 变量名;
public static 返回值 方法名(参数){}
需要注意的点: 静态成员为一个类的所有实体所共享,它属于类,而不属于类的某个对象!
静态成员使用类名调用:
\1. 类名.方法名(); // 调方法
\1. 类名.变量名 = ...; //给字段(属性)赋值
静态成员和实例成员
• 使用static修饰的成员称为静态成员
• 使用实例对象调用的成员称为实例成员
| 静态方法 | 实例方法 |
|---|---|
| static**关键字** | 不需要**static关键字** |
| 使用类名调用 | 使用实例对象调用 |
| 可以访问静态成员 | 可以访问静态成员 |
| 不可以直接访问实例成员 | 可以直接访问实例成员 |
| 调用前初始化 | 实例化对象时初始化 |
FileInfo类文件(非静态)
| 属性方法 | 说明 |
|---|---|
| Exists | 用于检查指定文件是否存在,返回一个布尔值 |
| Extension | 获取表示文件扩展名部分的字符串 |
| Name | 获取文件名 |
| FullName | 获取目录或文件的完整目录 |
| FileInfo CopyTo(string) | 将现有文件复制到新文件,不允许覆盖现有文件 |
| void Delete() | 永久删除文件 |
| void MoveTo(string) | 将指定文件移到新位置 |
范例:
//创建文件类对象
FileInfo file = new FileInfo("FileName文件路径");
//判断文件是否存在
if(file.Exists){}
//获取扩展名
fileanme = file.Extension;
//获取文件类型
filename.trim(".");
//获取文件名称
file.name;
//获取文件的路径
file..FullName;
//复制
file.copyTo("新路径");
//移动
file.moveTo("新路径");
//删除
file.deleteTo("新路径");
应用场景:
由于File类的静态方法在使用时都会进行安全检查,所以如果想要多次使用某个文件对象,可以考虑使用FileInfo类相应的实例方法,因为并不总是需要安全检查
DirectoryInfo操作目录(非静态)
案例
//路径
//DirectoryInfo非静态操作目录
Dire... directory = new ...("路径");
//获取目录后的目录
DirectoryInfo[] dirs = directory.GetDirectories();
//获取目录后的文件
FileInfo[] files = directory.GetFiles();
//循环获取目录名称等
foreach(DirecoryInfo dir in dirs){
cw(dir.name)//循环获取文件姓名
cw(dir.)
}
//循环获取文件名称等
foreach(FileInfo file in files){
cw(finle.FullName);//路径
cw(file.Length)//文件大小
}

浙公网安备 33010602011771号