【唐老狮】Unity系列之C#四部曲—C#入门

介绍
每句的命令记得用【分号】结束
命名空间:工具包
类:工具
函数:工具的功能
----------------------------------------------------------
输入与输出
WriteLine(“内容”):打印后有空行,甚至可以用作空行符
Write("内容"):打印后没空行
ReadLine():等待玩家输入,按回车结束
ReadKey(): 检测玩家是否按键,只要按了键盘上任意键,就会人为输入结束
----------------------------------------------------------
注释
----------------------------------------------------------
变量类型
#region 区块名
#endregion
可以在编辑代码时赋予折叠代码的功能。
声明格式:变量类型 变量名 = 初始值
拼接打印:WriteLine('' + 变量)
变量类型:
1.有符号整数:sbyte,short,int,long
2.无符号整数:byte,uint,ushort,ulong
3.浮点数:
- float,数字结尾记得加“f”,存储8位有效数字,从左第一个不是0的数开始算起
- double:默认浮点数类型,储存15~17位有效数字
- decimal:结尾加“m”,27~28位有效数字
- 备注:m,f大写小写都没关系
4.特殊类型:bool,char,string
- char:字符,单引号
- string:字符串,双引号
声明变量:int x = 2;
改变变量: x = 3;
这两者格式有区别
int x = 1, y = 2, z = 3;
int a2;变量初始化时建议就赋值,否则不安全
a2 = 1;
----------------------------------------------------------
变量储存空间
sizeof方法获取变量所占的内存空间(单位:字节)
int sbyteSIze = sizeof(sbyte);
sizeof不能得到string类型的内存空间,因为string的长度时可变的
变量的本质是二进制,0和1;
1个byte等于8位
----------------------------------------------------------
变量命名规范
----------------------------------------------------------
常量
const int i2 = 1
- 常量必须被初始化
- 常量不能被修改
- 用来声明一些常用不变的变量
----------------------------------------------------------
转义符
----------------------------------------------------------
隐式转换
不同变量类型之间的相互转换
隐式转换的基本规则:不同类型之间自动转换
大范围装小范围的类型,向下兼容,但不能向上兼容:
long l = 1;
int i = 1;
l = i;
decimal不能隐式储存double、float
bool、char、string之间不存在隐式转换
decimal、double,float可以装在任何类型的整数,因为可以用科学计数法来表示数字
- 大范围存小范围:
- decimal --> 整形(无符号,有符号)--> char
- double --> float --> 整形(无符号,有符号)--> char
- long --> int --> short --> sbyte
- ulong --> uint --> ushort --> byte
- 无符号无法隐式储存有符号
- 有符号可以隐式储存无符号,但无符号需要是非负的
----------------------------------------------------------
显式转换
将高精度的类型强制转换为低精度
语法:变量类型 变量名 = (变量类型)变量;
注意:精度问题,范围问题
有符号整形:(无符号整形同理)
sbyte sb = 1;
short s = 1;
sb = (int)s;
括号强转 可能会出现范围文通 造成的异常 (溢出)
浮点数之间
float f = 1.1f;
double d = 1.1234567890123456789f;
f = (float)d;
浮点数强转要注意精度的问题
uint ui2 = 1;
int i2 = 1;
ui2 = (uint)i2;
浮点数转整形时会把小数位上的数字全部丢弃,而不是四舍五入
char c = (char)1;//ASCII码值表
bool、string不能通过括号的形式强转
----------------------------
把字符串类型转化为对应的类型
语法:变量类型.Parse("字符串")
注意:字符串必须能够转换成对应类型,否则报错,
string str = “123”;
int i = int.Parse(str); // 123
要考虑值的范围必须是变量能存储的范围。
(无符号的相同)
要考虑值的精度必须是变量允许的精度范围
bool.Parse("true");
char.Parse("A");
----------------------------
更准确的将各个类型之间进行相互转换
语法:Convert.To 目标类型(变量或常量)
注意:填写的变量或常量必须正确,否则出错
int a = Convert.ToInt32("12");
Convert.ToInt32(1.6f); // 返回2
会四舍五入

----------------------------
作用:拼接打印
语法:变量.toString();
string str = 1.ToString();
WriteLine()就默认调用括号内的所有变量的ToString方法
----------------------------------------------------------
异常
try{ 希望进行异常捕获的代码块}
catch(Exception e){如果出错了,会执行catch中的代码,e是具体的错误,通过e得到具体的错误信息}
finally{不管有没有出错,都会执行其中的代码} (可选部分)
try中代码块一旦出错后面的代码就不会继续运行了
----------------------------------------------------------
算术运算符
把右侧的值赋值给左侧的变量
先算右侧结果,再赋值给左侧变量
09:25(待看)
----------------------------------------------------------
条件运算符
< > == != >= <=
比较结果是布尔变量: bool result = a > b;
条件运算符的优先级低于算数运算符
result = a + 3 > a - 2 + 3;
错误形式:1 < a < 6
只要是数值,就能用条件运算符进行比较
特殊类型char string bool只能同类型进行 ==, !=的比较
----------------------------------------------------------
逻辑运算符
&& 对布尔值进行运算
bool result = true && false;
符号:||
符号:!
逻辑非的优先级较高:! (3 > 2)
- 逻辑非优先级最高,逻辑与高于逻辑或
- 优先级:逻辑运算符 < 条件运算符 < 算术运算符 (逻辑非除外)
- 多个逻辑组合运用:没有括号的情况下,从左到右依次计算:bool result = i > 3 && i < 3 && l == 2;
逻辑与或逻辑或的左边满足判定条件后,右边就不进行计算了
int i3 = 1;
result = i3 > 0 || ++i3 >= 1;
i3的最后结果还是1,因为i3 > 0为true,已经满足了逻辑或的判定要求,所以++i3就不计算了。
----------------------------------------------------------
位运算符
主要用数值类型进行计算的,将数值转换为2进制,再进行位运算
(待完成)
----------------------------------------------------------
三目运算符
bool类型 ? bool类型为true时返回的内容 : bool类型为False时返回的内容;
string str = true ? "条件为真" : "条件为假" ;
第一个空位:结果是bool类型的任意表达式
第二个和第三个表达式:什么表达式都可以,但是它们结果的类型应该是一致的
----------------------------------------------------------
if语句
让顺序代码产生分支,满足某种条件时多执行一些代码
if(true){}
----------------------------------------------------------
switch语句
多条路径选其一
switch(变量){
case 常量:
满足条件执行的代码
break;
default:
上面case都不满足,就执行此
break
}
注意点:
- 常量,需要和变量类型一样的值
- defualt可省略
const char c2 = ‘A’;
switch(c){
case c2:
...
}
满足某些条件时,做的事情时一样的,就可以使用贯穿
不写break,会依次执行某个条件后的所有代码,直到遇到一个break跳出
----------------------------------------------------------
while语句
while(bool类型的值){
}
跳出循环逻辑的关键词
break:跳出循环
如果一个if语句嵌套在while中,而break语句再if中,那么break跳出的还是while语句。因为break只针对循环语句
break在swich中的用法与在while中的相似
continue只和while有关系,和switch没关系
----------------------------------------------------------
do while语句
while:先判断条件,再执行
do while循环:先至少执行依次一次循环语句块中的逻辑,再判断是否继续
do { 循环语句块}
while(bool类型的值); (注意这个分号)
continue在do while中会让程序回到while而非do
----------------------------------------------------------
for循环
for(初始表达式; 条件表达式; 增量表达式)
{循环块}
- 初始表达式:声明一个临时变量,用来计数
- 条件表达式: bool类型的结果
- 增量:初始表达式中的变量的自增减
for(int i = 0; i < 10; i++){}
for(int i = 0, j = 0; i < 10 && j < 0; i++, j = j+1){}
for循环的死循环:
for(;;){}
----------------------------------------------------------
总结