C#基础整理(五)

1.复习
字符串
(1)字符串的不可变性
(2)字符串的方法:
1)Split()
分割 把字符串中不想要的内容分割掉 返回一个字符串类型的数组
可以添加StringSplitOption.RemoveEmptyEntries 把空格都去除了,但是前面需要放入一个字符数组类型
例:

1 string str = “ABC DE FG”;
2 string [] s=str.Split(new char[] { ’ ’ }, StringSplitOptions.RemoveEmptyEntries);
2)Substring()
切割 切割字符串 返回一个string类型
输入0-?的数值(把字符串当做一个char类型的数组,数值为下标),返回一个从输入数值开始算起的字符串,前面的都截掉
如果后面还要添加一个数值 ,那就是截取的长度
例:

1 string str = “ABCDEFG”;
2 str=str.Substring(2,3)
3)ToUpper()
转大写 把字母转为大写
例:

1 string str = “abcdefg”;
2 str=str.ToUpper();
4)ToLower()
转小写 把字母转为小写
例:

1 string str= “ABCDEFG”
2 str=str.ToLower();
5)Trim()
去两端的空格
例:

1 string str=" abcdefg "
2 str=str.Trim();
6)TrimEnd()
去尾部空格
例:

1 string str = "abcdefg ";
2 str=str.TrimEnd();
7)TrimStart()
去首部的空格
例:

1 string str = " abcdefg";
2 str=str.TrimEnd();
8)Contains()
判断是否包含某个字符串
例:

1 string str = “ABCDEFG”;
2 if(str.Contains(“CD”))
3 {Console.WriteLine(“包含”);}
4 else
5 {Console.WriteLine(“不包含”);}
9)Replace()
替换 把旧的字符或字符串替换成新的字符或字符串,返回一个新的字符串
例:

1 string str = “小李子是个白痴”;
2 str=str.Replace(“白痴”,"**");
10)IndexOf()
查找某个字符第一次出现的位置,返回一个Int类型,如果没有,返回一个-1。
例:

1 string str = “adasafdsgfdhgfdhg”;
2 int nums=str.IndexOf(‘g’);
11)LastIndexOf()
查找某个字符最后一次出现的位置,返回一个Int类型,如果没有,返回一个-1。
12)StartsWith()
判断是否以某个字符开头,返回一个bool类型
例:

1 string str = “adasafdsgfdhgfdhg”;
2 if(str.StartsWith(“a”))
3 {Console.WriteLine(“是的”);}
4 else
5 {Console.WriteLine(“不是”);}
13)EndsWith()
判断是否以某个字符结尾,返回一个bool类型
例:

复制代码
1 string str = “adasafdsgfdhgfdhg”;
2 if(str.StartsWith(“g”))
3 {
4 Console.WriteLine(“是的”);
5 }
6 else
7 {
8 Console.WriteLine(“不是”);
9 }
复制代码
14)string.join()
把一个数组按指定的分隔符连接,返回一个string类型
join()里第一个放自定义string类型的分隔符,第二个放要连接的数组
例:

1 int[] str = { 1,2,3,4,5,6,7,8 };
2 string b=string.Join("|", str);
15)string.IsNullOrEmpty()
判断一个字符串是null或者空
例:

复制代码
1 string str = “”;
2 if(string.IsNullOrEmpty(str))
3 {
4 Console.WriteLine(“是的”);
5 }
6 else
7 {
8 Console.WriteLine(“不是”);
9 }
复制代码
16)ToCharArray()

把字符串转为char类型的数组
例:

1 string s = “121324”;
2 char [] chs=s.ToCharArray();
17)new string (char[] chs)
把数组转为字符串
例:

1 char[] chs = { ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’ };
2 string str=new string(chs);

继承:解决类中的代码冗余,把类中的一些相同的代码提取出来封装成一个父类
属性、方法、构造函数(子类默认调用父类无参数的构造函数,因为子类要使用父类的成员,就要创建父类的对象)
this:当前类的对象
调用自己的构造函数
base:调用父类的构造函数
new:隐藏父类的成员

2.里氏转换
object 是一切类型的基类
1)子类可以赋值给父类:如果一个地方需要一个父类作为参数,我们可以给一个子类代替
例1:
父类:Person 子类:Student
Student s=new Student();
Person p=s;
简写:
Person p=new Student();
例2:
string str= String.Join("|",object类)

父类不能调用子类成员,但是子类可以赋值给父类

2)如果父类中装的是子类对象,那么可以将这个父类强转为子类对象
子类可以调用父类的成员,但是父类不能调用子类的成员
例:
Student ss=(Student)p;
ss.StudentSayHello();

3)进行里氏转换强转的时候经常有可能抛异常,需要来判断。
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false.不会抛异常。
例:
Person p = new Student();
if(p is Teacher)
{
Teacher ss = (Teacher)p;
ss.TeacherSayHello();
}
else
{
Console.WriteLine(“转换失败”);
}
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个Null
例:
Person p = new Student();
Student t = p as Student;
t.StudentSayHello();

练习题
随机打印十个打招呼的方法
1)创建一个10位的父类空白数组
2)创建一个随机数的方法
3)for循环父类数组
4)给随机数赋值1-7,6位
5)用switch-case随机给数组赋值各个对象
6)用for循环将10个数组的打印出控制台
7)使用if-else if 将对象强转,由is来判断,并输出方法
((强转)数组名).方法

复制代码
1 Person[] pers = new Person[10];
2 Random r = new Random();
3 for (int i = 0; i < pers.Length; i++)
4 {
5 int rNumber = r.Next(1, 7);
6 switch(rNumber)
7 {
8 case 1:pers[i]=new Student();
9 break;
10 case 2:
11 pers[i] = new Teacher();
12 break;
13 case 3:
14 pers[i] = new ShuaiGUO();
15 break;
16 case 4:
17 pers[i] = new YeShou();
18 break;
19 case 5:
20 pers[i] = new MeiNv();
21 break;
22 case 6:
23 pers[i] = new Person();
24 break;
25 }
26 }
27 for (int i = 0; i < pers.Length; i++)
28 {
29 if(pers[i]is Student)
30 {
31 ((Student)pers[i]).StudentSayHello();
32 }
33 else if(pers[i] is Teacher)
34 {
35 ((Teacher)pers[i]).TeacherSayHello();
36 }
37 else if(pers[i] is ShuaiGUO)
38 {
39 ((ShuaiGUO)pers[i]).ShuaiGuoSayHello();
40 }
41 else if(pers[i] is YeShou)
42 {
43 ((YeShou)pers[i]).YeShouSayHello();
44 }
45 else if(pers[i] is MeiNv)
46 {
47 ((MeiNv)pers[i]).MeiNvSayHello();
48 }
49 else
50 {
51 pers[i].PersonSayHello();
52 }
53 }
54 Console.ReadKey();
复制代码
4.protected访问修饰符
受保护的:可以在当前类的内部以及该类的子类中访问。
比private的权限高一些

5.Path类
截取一个路径最后一个文件的名称。
例1:
string str = @“C:\Users\SJD\Desktop\123.txt”;
int index= str.LastIndexOf(’\’);
str=str.Substring(index + 1);
例2:用Path来做,返回一个字符串名字
快速获得一个路径下文件的名字
string str = @“C:\Users\SJD\Desktop\123.txt”;
Console.WriteLine(Path.GetFileName(str));
例3:Path.GetFileNameWithoutExtension(str)
获得文件名,但是不包括扩展名
例4:Path.GetExtension(str)
获得文件的扩展名
例5:Path.GetFileNameWithoutExtension(str)
获得文件所在的全目录文件夹
例6:Path.GetFullPath(str)
获得文件所在的全路径
例7:Path.Combine(@“c:\a”,“1.txt”)
连接两个字符串作为路径

Path这个类是专门用来操作路径的

6.ArrayList集合
//创建一个集合对象
ArrayList list=new ArrayList();
//集合:很多数据的一个集合
//数组:长度不可变、类型单一
//集合的好处:长度可以任意改变,类型随便
例:
list.Add(1);
list.Add(3.14);
list.Add(true);
list.Add(“张三”);
list.Add(‘男’);
list.Add(5000m);

打印
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}

//我们将一个对象输出到控制台,默认情况下,打印的就是这个对象所在的类的命名空间

Add表示添加一个元素
AddRange表示添加一个集合
例:
ArrayList list = new ArrayList();
//添加单个元素用Add
list.Add(true);
list.Add(1);
list.Add(“张三”);
//添加集合元素用AddRange
list.AddRange(new int[]{1,2,3,4,5,6,7,8,9});
list.AddRange(list);
for(int i=0;i<list.count; i++)
{
console.writeline(list[i]);
}
console.readkey();

list.Clear()
清空所有元素
list.Remove(true);
删除单个元素,写谁就删谁
list.RemoveAt(0);
根据下标去移除元素
list.RemoveRange(0,3);
根据下标去移除一定范围元素,从下标开始,删除几个
list.Reverse();
反转
list.Sort();
升序排列
list.Insert(1, “插入的”);
根据下标,插入一个任意元素
list.InsertRange(2, new string[] { “张三”,“李四”,“王二麻子”});
根据下标,插入一个任意的集合元素
bool b = list.Contains(1);
Console.WriteLine(b);
判断是否包含某个指定的元素,返回一个Bool类型
if(!list.Contains(“小李子”))
{
list.Add(“小李子”)
}
else
{
console.writeline(“已经有了”);
}

判断是否不包含某个指定的元素,不包含就创建一个,包含就提示已经有了。

7.集合的长度问题
//count 表示这个集合中实际包含的元素的个数
//capcity表示这个集合中可以包含的元素的个数
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
个数有1个,就开4个的空间,个数是5,就开8个的空间,依次类推翻倍 X2

8.HashTable集合 键值对集合
字典 孙 sun----孙 根据拼音找sun这个汉字
根据键来找值
HashTable ht=new HashTable();
ht.Add(键,值); 键和值都是object类型的,键和值都是任意的
添加键值对 输入键和值
查找键值对 在键值对集合中,是根据键去找值的。
console.writeline(ht[键]);输出的就是值了。

在键值对集合当中,我们是根据键去找值的。
键值对对象[键]=值;
*******:键值对集合当中,键必须是唯一的,而值是可以重复的
ht.Add(1, “张三”);
ht.Add(2, true);
ht.Add(3, ‘男’);
ht.Add(false, “错误的”);
ht.Add(5, “张三”);
ht[6]=“新来的”;//这也是一种添加方式
特殊性 ht[1]=“把张三干掉”;(键必须是唯一的,但是用这种方法可以替换)
[]做了一个判断,如果集合里面键没有1,就把这个键值加进去
如果集合里面键有1,就把它替换掉。

//abc----cba
添加之前先判断一下是否包含abc,如果有就不添加,没有才添加
if(ht.contains(1))
Contains
ContainsKey 这两种都是判断是否包含键
ContainsValue 判断是否包含值

ht.clear();移除集合中所有的元素
ht.Remove();根据键移除

9.foreach循环
foreach 两下tab键
foreach(var item in collection)
{

}

Hashtable ht = new Hashtable();
ht.Add(1, “张三”);
ht.Add(2, true);
ht.Add(3, ‘男’);
ht.Add(false, “错误的”);
foreach (var item in ht.Keys)
{
Console.WriteLine(ht[item]);
}
根据键来辨别每一项的元素
foreach (var item in ht.Values)
{
Console.WriteLine(item);
}
根据值来辨别每一项的元素

item 集合里的每一项,每一个元素
collection 集合
//var:根据值能够推断出来类型
//c#是一门强类型语言:在代码当中,必须对每一个变量的类型有一个明确的定义
int n=15;
string n2=“张三”;
double n3=3.14;
decimal n4=5000m;
bool n5=true;
char n6=‘男’;

console.writeline(n.GetType()); 获得变量类型

var n=15;
var n2=“张三”;
var n3=3.14;
var n4=5000m;
var n5=true;
var n6=‘男’;

console.writeline(n.GetType());通过值获得变量类型

能拿到这个变量类型是因为你已经对这个变量进行了一个明确的定义,已经告诉它这个变量的类型是什么了。

变量必须有一个明确的定义
首先确定变量的类型

//js是一门弱类型语言
//12 3.14 true “fdfsf” 'c’都用var
它不需要对你的变量有一个明确的定义,它可以根据你的值来推断你这个值的类型

为什么不用它,因为
string input;
input=“张三”;

var input; 会报错,因为input没有给他付初值。在使用推断类型var的时候,就必须给它赋值
input=“张三”;

根据变量的值来推断变量的类型,之所以不用,是因为使用Var的同时必须赋值

循环次数特别大的时候
foreach的效率是for循环的很多很多倍,次数不高的时候差不多

11.File类的基本操作
File.Create();在指定路径新建文件
例:
File.Create(@“C:\Users\SJD\Desktop\小李子是个2B.txt”);
File.Delete();删除指定路径的文件
例:
File.Delete(@“C:\Users\SJD\Desktop\小李子是个2B.txt”);
File.Copy();复制一个路径的文件到另一个路径
例:
File.Copy(@“C:\Users\SJD\Desktop\小李子是个2B.txt”, @“C:\Users\SJD\Desktop\1\new.txt”);

1024byte=1kb
1024kb=1M
1024M=1G
1024G=1T
1024T=1PT

12.编码
美国人发明了计算机,他们日常生活中用的都是az,09
计算机中存数据都是二进制 如要存个a,可能就是以10001110存储
10001110就称为a在计算机中的编码
美国人最早,他们用的编码叫 ASC 128
后来欧洲国家也用计算机 他们除了az,09之外,音标上和美国人不一样。这点东西不够用了。
他们用的编码叫ASCII 256

全世界开始用计算机,中国也开始用。中国推出了编码GB2312 国标
后来 国标只包含简体字
台湾,香港,澳门用繁体字,五大硬件厂商自己做了编码 Big5 繁体字

美国人发现编码太多了,大家做一些事情的时候很麻烦。
出了一个统一的编码
unicode编码 囊括了每个国家都能使用的编码格式
这个编码很全,但是解析起来很慢
正好赶上互联网飞速发展
都用UTF-8 针对web的一个编码。

编码:将字符串以怎样的形式保存为二进制。
乱码:
产生乱码的原因:就是你保存这个文件所采用的编码,跟你打开这个文件所采用的编码格式不一样。

13.复习
里氏转换
1)子类可以赋值给父类
2)如果父类中装的是子类对象,那么将这个父类强制转换为子类对象
集合
1)ArrayList
添加单个元素 Add
添加一个集合 AddRange
移除 Remove
RemoveAt
RemoveRange
插入 Insert
插入集合 InsertRange
清空 Clear
反转 Reverse
排序 Sort
2)HashTable 怎样根据键去找值 ht[键]=值;
存储的类型都是object

Path 操作路径的

File
Create 创建
Delete 删除
Move 剪切
Copy 复制
读取数据 ReadAllBytes() 字节数组要转换成字符串 Encoding.Default.GetString(字节数组)
写入数据 WriteAllBytes() 字符串转换成字节数组 Encoding.Default.GetBytes(字符串)

猜你喜欢

转载自blog.csdn.net/trouble0914/article/details/84785758