vs快捷键:Ctrl+J 快捷键能够打开代码提示框 ; F12 快速转到定义。
一、数据类型
int i = 100; //整型 float f = 10.00f;//小数浮点型默认是double类型,需要加f强制转换为float。或:float f = (float)10.00;一样的. double d = 10.00;//float:单精度4字节,因为正负号显示7位数,double:双精度8字节,显示15位有效数,float执行优于double decimal m = 1.55m;//存金钱的类型。小数点后面可以跟到28到29位。小数后面必须跟m。不然就会认为是double类型了。 char c = '男';//单个字符,运行快,必须单引号,不能为空 string s = "fadfwa";//字符串,必须双引号,可以为空 bool b = true;//布尔类型,有两个值:真true,假false。 const double R = 3.14;//常量const,如:圆周率=3.14 一直保持不变, 而已整个程序中常量不能被重新赋值,重新给常量赋值就报错。 i = default;//而变量可以被重新赋值。default是默认值 Console.WriteLine(i); //默认值有两种用法 Console.WriteLine(default(string));//输出字符串的默认值 //匿名变量:可以是任意类型(具有动态类型的特征,不需要明确指定类型,减少代码量,提高效率) 但定义变量时必须赋值明确变量数据类型。 var v = "隐式类型";//也叫万能数据类型,匿名函数,根据值来决定变量的数据类型,值是字符串,变量就是字符串,如果整型就是整型,必须赋值没默认值。 var v2 = new List<string>() { "1", "2", "3" }; Console.WriteLine(v.GetType().Name);//读取变量的数据类型 Console.WriteLine(v2.GetType().Name);
科学计数法:如3.14E2 =3.14 x 10二次方,E后面是几就是几次方,表格经常看到
转义字符:
\n:表示换行,\r\n:Windows不认识\n只认识\r\n ,其他系统认识\n,新版net6.0也认识
\t:表示tab建的空格。\b:表示退格键,放在字符串两边没效果。\":表示可以在字符串输出引号。
\\:表示取消\的转义作用输出一个\路径的时候用,另外如果麻烦的换行@"字\符\串\路\径"就不需要添加\只要在字符串前面加@符号,告诉双引号里面是字符串,字符串就会原样输出,这种方法叫逐字字符串:就是说@“冒号里面的直接认为是字符串”。
string stss = " Hello this\n is\r a \ttest";//转义字符/n是换行在苹果系统和控制台有用,但是打印到Windows系统文本里没效果的必须要\r\n才能换行。 Console.WriteLine(stss + "输出斜杠:\\" + @"这种也能识别斜杠:D:\abc");
二、字符串的截取
using System.Text.RegularExpressions;//正则表达式方法Regex.Replace()所在的命名空间 string str = " Hello this\n is\r a \ttest"; Console.WriteLine(str.StartsWith(" Hello"));//判断是否以Hello字符串开始 Console.WriteLine(str.EndsWith("Hello"));//判断是否以Hello字符串结束 Console.WriteLine(str.Contains("Hello"));//判断字符串中是否包含指定字符串,只要出现就返回true Console.WriteLine(str.Equals("Hello"));//完全等价于关系运算符的 str == "hello" 是否完全相等,返回true/false Console.WriteLine(str.IndexOf("lo")); //索引小标位置, 类似于模糊查询,通常用作判断 str.IndexOf("lo") > -1 表示索引不到值,不存在 Console.WriteLine(str.LastIndexOf("lo"));//和上面一样也是索引,返回的是最后一个出现的位置 Console.WriteLine(str.IndexOf("lo", 2));//从第二个下标开始查找 Console.WriteLine(str.Insert(2, "你好!"));//在第二个下标位置插入 你好 Console.WriteLine(str.Remove(2, 3));//删除字符串Remove(开始, 结束) 也可以只有一个开始下标 Remove(开始) 默认结束是最后。也就是开始后面的全部删除。 Console.WriteLine(str.Substring(2, 3));//截取字符Substring(开始,结束) 也可以只有一个开始下标 Substring(开始) 默认结束是最后。 Console.WriteLine(str.Replace("llo", "aaa"));//替换字符 Console.WriteLine(str.ToLower());//字符串转小写 Console.WriteLine(str.ToUpper());//字符串转大写 Console.WriteLine(str.Trim());//清楚字符串的左右两边空格 Console.WriteLine(str.TrimStart());//清楚字符串的前面空格 Console.WriteLine(str.TrimEnd());//清楚字符串的后面空格 Console.WriteLine(Regex.Replace(str, @"\s", ""));//利用正则表达式清楚字符串所有空格 //用法 string url = "http://www.baidu.com/index.html"; Console.WriteLine("网址中的协议是:" + url.Substring(0, url.IndexOf(":"))); Console.WriteLine("网址中的协议是:" + url.Substring(url.LastIndexOf("/") + 1)); if (!string.IsNullOrEmpty(str))//判断字符串释放有值,可以可以判断空值null或者“” ,这里判断字符串是否为空,加!表示非空。 { string[] arr = str.Split(' ');//拆分字符串,以空格拆分 Console.WriteLine("arr数组长度为:{0}", arr.Length);//同样字符串也有长度 foreach (string itme in arr) { Console.WriteLine(itme); } Console.WriteLine(string.Join(":", arr));//把一维数组里面的值链接成字符串 } Console.ReadKey();//读取一个键,下面是读取一行。可以用变量来接收,字符串类型。 Console.ReadLine();//这里利用接收输入来暂停程序,避免程序一闪而过
三、数据类型转换
推荐使用c#给我们的万能转换器:Convert.数据类型(需要被转换的值);
int num = 102;//定义变量还可以这样写 int a,b=1; 数据类型一样可以这样定义 a没有赋值,b赋值了1 string strnum = num + ""; //等价于 num.ToString(); 需要转换的值.To数据类型(),+号起到连接字符串的作用,当两边都是数字起到相加的作用。 num = int.Parse(strnum); // 数据类型.Parse(需要转换的值) //万能转换Convert:上面这种灵活性不够,所以尽量使用万能转换器Convert,他是一个转换工厂 num = Convert.ToInt32(strnum); //数据类型的基类 Convert.ToString(111); 就强制转换为字符串了 //还有一种强制类型转换:将大类型转换成小类型,这种任意丢失数据 ,了解就好不建议使用 建议使用万能转换器Convert double x = 12.36; //可以存整数也可以存小数。小数点后面是15到16位。 int y = (int)x;//不建议使用,说一下这种是强制类型转换也叫显示类型转换。大转小用 double nu11 = num;//这种就是自动转换也叫隐示转换,小转大用 char sex = '男'; string str = sex.ToString(); char[] chs = "abcdefg".ToCharArray();//将字符串转换为char数组,通过下标索引来换取每个字母。 chs[0] = 'd';//相当于把字符串第一个字母a改成d string s = new string(chs); //把char数组转换为字符串。当然普通字符串也可以看做char类型的只读数组。 Console.WriteLine(s[0]);//既然可以将string看做char类型的只读数组,那么就可以通过下标索引字符串的某个元素。 Console.WriteLine(s); //布尔类型返回值是true和false常用于if判断里面。 bool tr = int.TryParse("字符串转成功返回1失败为0赋值给变量num", out num);//TryParse方法是尝试将字符串转换成整形。 Console.WriteLine("布尔值:{0},转换的整数值为:{1}", tr, num);//如果转换成功就赋值否则就是0
四、运算符
在计算机中++或--是一元运算符,而+-*/%是二元预算法,计算机会先执行一元在算二元预算法。
int a = 5; int b = a++ + ++a * 2 + --a + a++;//5+7*2+6+6=31 这里a++ 先赋值在执行a+1,而++a 是先+1在赋值给a Console.WriteLine("b的结果为:" + b + ",而a的结果为:" + a);//b=31,a=7 Console.WriteLine(a += b);//a+=b等同于 a=a+b Console.WriteLine(5%2);//相当于5除以2取余数。5/2余数是1,所以值为1
五、随机数因子与两种输出变量的形式及常量的定义
Random rd = new Random();//随机数因子,实例化对象:由类转换成一个对象的过程,关键字new 语法:类名 对象名 =new 类名(); 此时类就变成了一个具体的对象。 int rrr = rd.Next(1, 10);//表示1-(10-1)的随机数, 访问类的成员:对象名.成员名来访问的 const string st = "常量关键字const程序执行结束都不发生改变,只能被赋值一次,而且定义了就必须赋值,比如圆周率=3.14不会改变"; Console.WriteLine("输出随机数:" + rrr); Console.WriteLine("占位符输出:{0},{1}", rrr, st);//如果多变量从{0}{1}...开始索引每个变量
六、访问修饰符和静态变量
4种访问修饰符
public:公共的,所有程序集都可以访问(其他程序集访问需要引入命名空间才可以)
internal:内部的,当前程序集可以访问
protected:受保护的,当前类和子类可以访问,子类实例化对象时点不出来。但是可以访问。不会报错,相当于隐藏了属性。
private:私有的,只能是当前类可以访问
类的访问修饰符(两种):public internal(默认)
类的成员(方法和变量)访问修饰符(4种):public internal protected private(默认)
首先了解一下:所为对象指的是类,成员指的是方法和变量。
类分两种:实体类和静态类
区别:静态类中所有成员必须是静态的且不能被继承;非静态类中不受限制,可以是静态也可以是实体成员(指方法或变量),可以被继承。
调用:静态调用不需要实例化对象,即:类名.方法()或变量。实体类必须实例化对象:【类名 对象名 =new 类名() 】新版本支持【类名 对象名 =new()】,才能用【对象名.成员名】调用。
静态:表示一个公共的存储区域,每次调用都是最新的一次赋值,值到所有程序关闭结束。关键字:static
非静态:每次调用结束都会被初始化,垃圾回收。
Test t = new Test();//实例化对象 Console.WriteLine(t.i++ +"静态变量:"+Test.I2++);//同时给两个变量都加1 Test t2 = new(); //新版本可以这样实例化对象 Console.WriteLine(t2.i + "静态变量:" + Test.I2);//每次调用:非静态被初始化,静态类会记录最后一次数据。 public class Test { public int i = 1;//非静态变量,另外变量在类里叫全局,在方法里叫局部 static int i2 = 1;//静态变量 public static int I2 { //因为字段默认受守护的,外部不能随意访问,所以需要给字段添加属性,严格规范:赋值给属性,属性赋给字段。 get { return i2; } set { i2 = value; } } }