C#自学笔记_008_Real
一、namespace(命名空间)
1、用于解决类重名问题,可以看做“类的文件夹”
2、如果当前项目中没有这个类的命名空间,那么需要手动扫入这个类所在的命名空间
方法:(1)用鼠标移到想用的类名上,进行相应点击
(2)Alt+shift+f10
(3)直接在程序开头进行调用
3、在一个项目中引用另一个项目的类
步骤:(1)在需要引用的项目中右键添加引用,选择被引用的项目
(2)引用命名空间
(3)进行调用相应的类
二、值类型和引用类型
1、两者区别:
(1)值类型和引用类型在内存上存储的地方不一样
(2)在传递值类型和传递引用类型的时候,传递的方式不一样。
2、值类型传递我们称为值传递,引用类型传递我们称为地址传递
值类型:int double bool char decimal struct enum
引用类型:string 自定义类 数组
3、存储:
值类型的值是存储在内存的栈中
引用类型的值是存储自内存的堆中
> https://www.bilibili.com/video/BV1FJ411W7e5?p=109
三、字符串
1、字符窜的不可变性:
(1)当给一个字符串重新赋值之后,老值并没有销毁,而是中心开辟新的空间来存储新值。
(2)当程序结束后,GC会扫描整个内容,如果发现有空间没有被指向,则会立即把它销毁。
2、可以将string类型看做成char类型的一个只读数组。
我们可以通过下表来访问字符串中的第一个元素
string s = "abcdefg"; // 定义一个字符串
Console.WriteLine(s[0]); // 访问字符串的第一个字符 (注意:该字符为char类型)
Console.WriteLine(s[3]); // 访问字符串的第四个字符 (注意:该字符为char类型)
Console.ReadKey();
但是无法对字符串进行修改,因为字符串的内容是只读的,如果想进行修改,就需要先将字符串转换成字符数组,即:string–>char[]
string s = "abcdefg"; // 定义一个字符串
char[] chs = s.ToCharArray(); //转换成字符数组
chs[0] = 'b'; //修改元素值
s = new string(chs); //新建字符串,用修改的数组赋值
Console.WriteLine(s[0]);
Console.WriteLine(s);
Console.ReadKey();
ToCharArray();可以将字符串转换成数组
new string(char[] chs);能后将char数组转换成字符串
3、因为每次修改字符串内容系统都需要重新开辟新的内存空间,所以当需要进行大量数据操作的时候将会非常消耗时间和内存,所以需要另一种解决方案就是: StringBuilder
下面是StringBuilder的使用,和普通修改字符串内容方式的时间比较:
StringBuilder sb = new StringBuilder();
string str = null;
//创建一个计时器,用来记录程序运行的时间
Stopwatch sw = new Stopwatch();
sw.Start(); //计时开始
for (int i = 0; i < 100000; i++)
{
str += i; //用时:00:00:30.1310705
//sb.Append(i); //用时:00:00:00.0419006
}
sw.Stop(); //计时结束
Console.WriteLine(sw.Elapsed);
4、字符串提供的各种方法
(1)Length :获得当前字符串的字符个数,即字符串长度 格式:数据类型(int) 变量名 = 字符串名.Length;
(2)ToUpper() :将字符串中的字符转换成大写形式 格式:字符串名 = 字符串名.ToUpper;
(3)ToLower() :将字符串中的字符转换成小写形式 格式:字符串名 = 字符串名.ToLower;
(4)要忽视大小写对两个全英文字符的字符串是否仙童进行比较可以使用:
Equals()函数进行:格式:字符串1.Equals(字符串2,StringComparison.OrdinalIgnoreCase)
(5)分割函数(Split):
//字符串分割:split
string s = "a b , huihui,,,hu __ iohu, wudoh"; //创建任意一个字符串
//任务是将上面的字符串中的空格,标点符号、下划线都去掉,形成一个只有字母的字符串
char[] chs = {' ','_',',' }; //创建字符数组,元素为字符串中需要去掉的字符
string[] str = s.Split(chs, StringSplitOptions.RemoveEmptyEntries); //使用Split函数进行分割
for (int i = 0; i < str.Length; i++)
{
Console.Write(str[i]);
}
Console.ReadKey();
(6)字符串内容替换函数Replace
用于替换字符串中的内容
string str = "五颜六色的世界";
string str1 = "";
if (str.Contains("世界")) //字符串名.Contains("要查找的内容"); 该函数用于查看字符串中的内容,
{
str1 = str.Replace("世界", "**"); //Replace用于替换字符串的内容。
}
Console.WriteLine(str);
Console.WriteLine(str1);
Console.ReadKey();
}
**(6)*****Substring函数用于截取字符串
//Substring函数,用于截取字符串
string str2 = "同一个世界同一个梦想";
str2 = str2.Substring(3, 4); //第一个参数3代表从第4个开始截取,包括第四个字符,参数4代表从第四个开始,往后截取四个字符
Console.WriteLine(str2);
Console.ReadKey();
(7)StartsWith(string value),与EndsWith(字符串名)
StartWith:判断字符串是否以字符串value开始 bool类型的函数
EndsWith:判断字符串是否以字符串value结束 bool类型的函数
//StartWith(string value)与EndsWith(string value)
string str = "同一个世界同一个梦想";
if (str.StartsWith("同一"))
{
Console.WriteLine("是的");
}
else
{
Console.WriteLine("不是的");
}
if (str.EndsWith("梦想"))
{
Console.WriteLine("是的");
}
else
{
Console.WriteLine("不是的");
}
Console.ReadKey();
(8)IndexOf与LastIndexOf
string str = "同一个世界同一个梦想";
int index = str.IndexOf("世"); //IndexOf函数用于查找字符在字符串中第一次出现的位置
Console.WriteLine(index);
int index1 = str.LastIndexOf("一"); //LastIndexOf函数用于查找字符在字符串中最后一次出现的位置
Console.WriteLine(index1);
Console.ReadKey();
注意:
LastIndexOf函数经常与SubString函数组合使用,用于截取具体的文件
因为,一般文件名都是加路径一起出现在程序中,例如:
C:\Windows\Microsoft.NET\Framework\v1.0.3705\installutil.exe.config
如果我们只想要截取最后的文件名,就可以进行如下代码:
string str = "C:\\Windows\\Microsoft.NET\\Framework\\v1.0.3705\\installutil.exe.config";
//字符串中只能用\\来代表一个\
int index = str.LastIndexOf("\\"); //获得最后一个斜杠\的位置
string fileName = str.Substring(index + 1); //从最后一个斜杠开始截取文件名,+1是为了去掉斜杠
Console.WriteLine(fileName);
Console.ReadKey();
(9)去空格函数Trim() TrimStart() TrimEnd()
Trim()用于去掉字符串中所有空格
TrimStart()用于去掉字符串前面的空格
TrimStart()用于去掉字符串后面的空格
string str = " hahaha hhahahaha ";
string str1 = str.Trim();
Console.WriteLine(str1);
string str2 = str.TrimStart();
Console.WriteLine(str2);
string str3 = str.TrimEnd();
Console.WriteLine(str3);
Console.ReadKey();
(10)判断字符串是否为Null或者空字符串sNullOrEmpty(字符串名);
string str = "hahahahhaha";
bool b = string.IsNullOrEmpty(str);
Console.WriteLine(b);
Console.ReadKey();
(11)添加字符串函数:Join();
string[] names = { "张三", "李四", "王五", "赵六", "田七" };
string strNew = string.Join("|", names);
Console.WriteLine(strNew);
Console.ReadKey();
输出结果: