C# 面向对象系列笔记(三)
第三天
1. 类转换的关键字is和as
is (能不能转):
如果转换成功,则换回true,如果转换不成功,则返回false;
Person person = newStudent("学生", 11, '男', 100);
if (person isStudent)
{
((Student)person).Study();
}
else
{
Console.WriteLine("转换失败");
}
as:(尝试的转)
如果转换成功,则返回要转的对象,失败则返回null
Person person = newStudent("学生", 11, '男', 100);
Teacher teacher = person asTeacher;
if (teacher != null)
{
teacher.Teach();
}
else
{
Console.WriteLine("转换失败");
}
2.base:关键字
区别:
this:
1> 就代表当前类的对象
2> 调用当前自己类中的构造函数
base:
1> 指向父类的引用,可以调用父类的成员。
2> 子类继承父类的构造函数时,用于调父类的构造函数
base并不代表父类的对象,而是指向父类的一个引用
通过base关键字,我们可以调用父类的成员
publicnewvoid Test()//彻底的将父类的Test隐藏了子类调用不到父类的Test()了
{
Console.WriteLine("我是子类");
base.Test();
}
3. new
1> 把父类与子类同名的方法进行隐藏,子类把方法重写
2> 创建对象
Person类
publicvoid Test()
{
Console.WriteLine("我是父类");
}
Teache类
publicnewvoid Test()//彻底的将父类的Test隐藏了子类调用不到父类的Test()了
{
Console.WriteLine("我是子类");
base.Test();
}
4. ArrayList集合:
特点: 不需要考虑数组的长度
不需要考虑元素的类型和个数
常用的方法:
1> list.count : 实际包含的元素个数;
2> list.capcity: 可包含的数组个数(从4开始,进行2为递增)
3> list.Add(): 添加单个元素;
4> list.AddRange(): 添加一个数组
5> list.Clear(): 清除集合中所有的元素
6> list.Remove(“张三”): 写谁谁就被删掉了
7> list.RemoveAt(1): 根据下标删除集合中的元素;
8> list.RemoveRange(0,3): 删除一定范围内的元素
9> list.Insert(1,”我是新来的”);插入元素到指定1的位置
10> list.InsertRange(0, new string[] { "张三", "李四", "王二狗蛋儿" }): 插入一条数组
11> list.Sort() 进行升序排列
12> list.Rever() 反转整个数组
5. 装箱和拆箱
装箱:值类型---à引用类型
int n = 10;
object o = n;//装箱
拆箱:引用类型---à值类型
int n2 = (int)o;//拆箱
注意: 有继承关系的对象才能发生拆装箱,没有就不能发生拆装箱;
装箱什么类型,拆箱就必须什么类型
6.Hashtable字典集合(键--->字典的拼音目录;值--->汉字)
定义:存储数据的时候,采用的是键值对的方式来进行存储。
创建过程:
Hashtable ht = newHashtable(); //创建字典集合对象
ht.Add(1, "张三"); //给集合对象添加数据
Console.WriteLine(ht[1]); //根据键的值输出值
//我们使用foreach循环来对键值对集合进行遍历
foreach (var item in ht.Values) //如果ht.Keys就是把数组中所有键传入item中,最后根据ht[item]查询值
{
//Console.WriteLine("键{0}----值{1}",item,ht[item]);
Console.WriteLine(item); //item值
}
注意:1.在我们给Hashtable添加数据的时候,键必须是唯一的,而值是可以重复的;
if (!ht.ContainsKey(2)) //判断键是否重复
{
ht.Add(2, "新来哒");
}
else
{
Console.WriteLine("集合中已经存在相同的键");
}
2.键是可以重新赋值的。
7. var
称之为推断类型,能够根据值推断出值的类型
var number = 100;
var pi = 3.14;
var name = "张三";
var gender = '男';
var money = 5000m;
var b = true;
Console.WriteLine(number.GetType());
Console.WriteLine(pi.GetType());
Console.WriteLine(name.GetType());
Console.WriteLine(gender.GetType());
Console.WriteLine(money.GetType());
Console.WriteLine(b.GetType());
注意:本类型不建议使用,因为C#是一门强类型语言,就是对数据的类型必须有一个明确的定义。而且造成程序后期可读性差;
8. File: (using System.IO;//File类的命名空间)
常用函数:
File.Exist(): 判断指定的文件是否存在,返回bool类型;
File.Create(): 创建一个对象;
eg:
//创建文件之前,首先判断文件是否存在绝对路径
if (!File.Exists(@"C:\Users\SpringRain\Desktop\new.txt"))
{
File.Create(@"C:\Users\SpringRain\Desktop\new.txt");
}
File.Delete(): 删除一个文件;
eg:
File.Delete(@"C:\Users\SpringRain\Desktop\new.txt");
Console.WriteLine("删除成功");
File.Copy(): 复制一个文件;
eg:
File.Copy(@"C:\Users\SpringRain\Desktop\繁体字.txt", @"C:\Users\SpringRain\Desktop\new繁体字new.txt");
File.Move(): 剪切一个文件;
eg:
File.Move(@"C:\Users\SpringRain\Desktop\new繁体字new.txt", @"D:\新来的.txt");
路径:
1.相对路径:文件相对于你可执行应用程序的路径;
2.决对路径:通过这个路径可直接在你电脑上找到这个文件的路径;
9. Path
Path.GetFileName(); 获取文件名但是包含扩展名
Path.GetFileNameWithoutExtensition();获取文件名但是不包括扩展名;
eg:
string filePath = @"C:\Users\SpringRain\Desktop\繁体字.txt";
#region Old Method老方法
//int index = filePath.LastIndexOf("\\");
//int index2 = filePath.LastIndexOf(".");
//string fileName = filePath.Substring(index + 1,index2-index-1);
#endregion
Console.WriteLine(Path.GetFileName(filePath));
Console.WriteLine(Path.GetFileNameWithoutExtension(filePath));
Path.ChangeExtension(): 改变文件后辍名;
eg:
Console.WriteLine(Path.ChangeExtension(filePath, "jpg"));
Path.GetFullPath(): 获得文件的绝对路径;
eg:
Console.WriteLine(Path.GetFullPath("1.txt"));
第三天
1. 类转换的关键字is和as
is (能不能转):
如果转换成功,则换回true,如果转换不成功,则返回false;
Person person = newStudent("学生", 11, '男', 100);
if (person isStudent)
{
((Student)person).Study();
}
else
{
Console.WriteLine("转换失败");
}
as:(尝试的转)
如果转换成功,则返回要转的对象,失败则返回null
Person person = newStudent("学生", 11, '男', 100);
Teacher teacher = person asTeacher;
if (teacher != null)
{
teacher.Teach();
}
else
{
Console.WriteLine("转换失败");
}
2.base:关键字
区别:
this:
1> 就代表当前类的对象
2> 调用当前自己类中的构造函数
base:
1> 指向父类的引用,可以调用父类的成员。
2> 子类继承父类的构造函数时,用于调父类的构造函数
base并不代表父类的对象,而是指向父类的一个引用
通过base关键字,我们可以调用父类的成员
publicnewvoid Test()//彻底的将父类的Test隐藏了子类调用不到父类的Test()了
{
Console.WriteLine("我是子类");
base.Test();
}
3. new
1> 把父类与子类同名的方法进行隐藏,子类把方法重写
2> 创建对象
Person类
publicvoid Test()
{
Console.WriteLine("我是父类");
}
Teache类
publicnewvoid Test()//彻底的将父类的Test隐藏了子类调用不到父类的Test()了
{
Console.WriteLine("我是子类");
base.Test();
}
4. ArrayList集合:
特点: 不需要考虑数组的长度
不需要考虑元素的类型和个数
常用的方法:
1> list.count : 实际包含的元素个数;
2> list.capcity: 可包含的数组个数(从4开始,进行2为递增)
3> list.Add(): 添加单个元素;
4> list.AddRange(): 添加一个数组
5> list.Clear(): 清除集合中所有的元素
6> list.Remove(“张三”): 写谁谁就被删掉了
7> list.RemoveAt(1): 根据下标删除集合中的元素;
8> list.RemoveRange(0,3): 删除一定范围内的元素
9> list.Insert(1,”我是新来的”);插入元素到指定1的位置
10> list.InsertRange(0, new string[] { "张三", "李四", "王二狗蛋儿" }): 插入一条数组
11> list.Sort() 进行升序排列
12> list.Rever() 反转整个数组
5. 装箱和拆箱
装箱:值类型---à引用类型
int n = 10;
object o = n;//装箱
拆箱:引用类型---à值类型
int n2 = (int)o;//拆箱
注意: 有继承关系的对象才能发生拆装箱,没有就不能发生拆装箱;
装箱什么类型,拆箱就必须什么类型
6.Hashtable字典集合(键--->字典的拼音目录;值--->汉字)
定义:存储数据的时候,采用的是键值对的方式来进行存储。
创建过程:
Hashtable ht = newHashtable(); //创建字典集合对象
ht.Add(1, "张三"); //给集合对象添加数据
Console.WriteLine(ht[1]); //根据键的值输出值
//我们使用foreach循环来对键值对集合进行遍历
foreach (var item in ht.Values) //如果ht.Keys就是把数组中所有键传入item中,最后根据ht[item]查询值
{
//Console.WriteLine("键{0}----值{1}",item,ht[item]);
Console.WriteLine(item); //item值
}
注意:1.在我们给Hashtable添加数据的时候,键必须是唯一的,而值是可以重复的;
if (!ht.ContainsKey(2)) //判断键是否重复
{
ht.Add(2, "新来哒");
}
else
{
Console.WriteLine("集合中已经存在相同的键");
}
2.键是可以重新赋值的。
7. var
称之为推断类型,能够根据值推断出值的类型
var number = 100;
var pi = 3.14;
var name = "张三";
var gender = '男';
var money = 5000m;
var b = true;
Console.WriteLine(number.GetType());
Console.WriteLine(pi.GetType());
Console.WriteLine(name.GetType());
Console.WriteLine(gender.GetType());
Console.WriteLine(money.GetType());
Console.WriteLine(b.GetType());
注意:本类型不建议使用,因为C#是一门强类型语言,就是对数据的类型必须有一个明确的定义。而且造成程序后期可读性差;
8. File: (using System.IO;//File类的命名空间)
常用函数:
File.Exist(): 判断指定的文件是否存在,返回bool类型;
File.Create(): 创建一个对象;
eg:
//创建文件之前,首先判断文件是否存在绝对路径
if (!File.Exists(@"C:\Users\SpringRain\Desktop\new.txt"))
{
File.Create(@"C:\Users\SpringRain\Desktop\new.txt");
}
File.Delete(): 删除一个文件;
eg:
File.Delete(@"C:\Users\SpringRain\Desktop\new.txt");
Console.WriteLine("删除成功");
File.Copy(): 复制一个文件;
eg:
File.Copy(@"C:\Users\SpringRain\Desktop\繁体字.txt", @"C:\Users\SpringRain\Desktop\new繁体字new.txt");
File.Move(): 剪切一个文件;
eg:
File.Move(@"C:\Users\SpringRain\Desktop\new繁体字new.txt", @"D:\新来的.txt");
路径:
1.相对路径:文件相对于你可执行应用程序的路径;
2.决对路径:通过这个路径可直接在你电脑上找到这个文件的路径;
9. Path
Path.GetFileName(); 获取文件名但是包含扩展名
Path.GetFileNameWithoutExtensition();获取文件名但是不包括扩展名;
eg:
string filePath = @"C:\Users\SpringRain\Desktop\繁体字.txt";
#region Old Method老方法
//int index = filePath.LastIndexOf("\\");
//int index2 = filePath.LastIndexOf(".");
//string fileName = filePath.Substring(index + 1,index2-index-1);
#endregion
Console.WriteLine(Path.GetFileName(filePath));
Console.WriteLine(Path.GetFileNameWithoutExtension(filePath));
Path.ChangeExtension(): 改变文件后辍名;
eg:
Console.WriteLine(Path.ChangeExtension(filePath, "jpg"));
Path.GetFullPath(): 获得文件的绝对路径;
eg:
Console.WriteLine(Path.GetFullPath("1.txt"));