.Net学习 第1季 C#基础
.Net 视频学习第1季 C#基础
01 基础语法
基本上和C++差不多
注释符有三种 单行注释:// 多行注释:/* */ 文档注释:///(多用于解释类和方法)
常用快捷键
ctrl+S 保存 ctrl+Z 撤销上一次操作 ctrl+K+C 注释所选代码 ctrl+K+U 取消所选代码注释 ctrl+K+D 快速对齐代码 home 光标跳到该行起始 end 光标跳到该行结尾
#region与#endregion中间的内容可以折叠起来,注释可以写在#region的后边(至少隔一个空格),C++没有这个语法
常用数据类型 int 整型 double 双精度小数 float 浮点数 decimal 比double表示范围小但精度更高的小数,常用于金钱表示,数字结尾要加m string 字符串 char 字符
变量要先声明后赋值再使用
String s = ""; 这个String是.Net中所有语言共享的类, string s =""; 这个string是C#的关键字,在C#语言中这两句代码编译后没有区别,都映射到System.string类
命名规范:变量用camel命名法,类和方法用pascal命名法
加号运算符的重载:如果操作的其中一个变量为string,则另外一个变量会隐式转换为string,再进行string连接操作,注意C++没有这个语法,在C++中会提示加号运算符没有相应的重载,两个变量类型不匹配
(写习惯C++了,所以还是会选择显式转换提醒自己)
占位符{n},n从0开始算,Console.WriteLine("带占位符的字符串", {0}的内容, {1}的内容,...);注意真正使用的占位符可以不按0,1,2...的顺序使用,也可以定义了占位符的内容但不使用
(有点C语言中printf的风格,不过不需要再指明占位内容的数据类型,C#会将所有数据类型自动转换为string并进行连接操作)
所有的数据类型都可以转为string,而C#为我们提供了函数(方法:XX.ToString(xx)),并在某些地方做了自动转换(例如加号晕算法)
交换变量先开辟第三方变量作为中转(当然对于数值类型的变量x y交换,可以x=x-y; y=y+x; x=y-x;来完成)
常用的用户输入输出语句
Console.WriteLine("XXX",{0},{1},...); // 带占位符的控制台输出
Console.ReadKey(); // 暂停程序,等待用户输入任意键,显示该键入到控制台
string str = Console.ReadLine(); // 暂停程序,等待用户输入一行字符并以回车结束,将结果保存到string类型的变量中,注意返回结果是string类型,只能用string的变量来(直接)接收
关于转义字符/,和C++的没有太大区别,不过C#为了方便使得字符串中的/不起转义作用(也就是说/是字符串本身的内容,常见于文件路径字符串中),设置了@,在字符串前(第一个双引号前)添加@,
取消字符串中/的转义作用,并且会按照字符串输入格式来生成(能辨认换行和换行后的空格)
数值数据类型的隐式转换,注意decimal的精度比double的精度要高,显式转换,注意要同为数值类型的变量才能转换
注意:
int a = 10; int b = 3; double c = a / b;
这样得到的是c是3,当然是double类型的3,原因是先执行a/b,这是int/int,得到int 3,再将int 3赋值给c,但c是double,执行隐式转换,得到double 3。如果想得到double 3.33333,可以这样写:
int a = 10; int b = 3; double c = a * 1.0 / b;
这时候a*1.0在执行时会将a隐式转换为double 10.0,之后的结果都是double类型,自然得到3.33333
更通常的情况是两种不兼容的类型转换,C#提供了一个public static class,名为Convert。(static class,因此不能被new,用于实现纯函数)
string s = "123"; double d = Convert.ToDouble(s); int a = Convert.ToInt32(s); d = 12.34; string str = Convert.ToString(d);
注意:一切数据类型都可以转为string,但是string转数值类型时有可能出现输入非法的情况,譬如s="123abc",这样再使用ToInt32之类的转换方法就会抛出异常。
关于逻辑运算符&&和||,以及&和|:语法上&&和&都表示逻辑与,||和|都表示逻辑或,所以运算结果是一样的,但是&&和||的效率更高,因为对于
bool b1 = 5 < 3 && 4 > 3; bool b2 = 5 > 3 || 4 < 2;
b1在计算5<3之后立刻就知道与的结果b1为false,所以4>3这一句是不会执行的(因为没有必要),但是如果用&的话,就会执行这句,再看5<3(false)和4>3(true)进行想与的结果。同理b2在计算5>3之后就知道或的结果为true,也不会执行4<2,但是|的话就会执行。因此
int a = 10; int c = 0; bool b = ( a++ > 0 ) || ( c++ > 10 );
运算后a等于11但是c依然等于0,因为c++>10这句代码没有执行。(尽量避免这种自增自减和其他语句混合的写法)