C#学习笔记——入门
前言
转载自:https://blog.csdn.net/hcjdgskg/article/details/135079330
一、控制台输入输出语句
console.wirteline
console.wirte
console.readline:按回车键才会继续执行后续代码
console.readkey:检测玩家是否按键,只要输入任意键就会继续执行后续代码,不会把输入的内容显示在控制台上
二、初识变量
1.折叠代码
#region 知识点一 变量
//代码内容
#endregion
2.变量声明的固定写法
变量类型 变量名=初始值;
【注1】多个相同类型变量同时声明时,用逗号隔开
【注2】变量声明时可以不设置初始值,但在使用时必须是赋了值的
int a1=1,b1=2,c1=3;
string s1="123",s2="234";
c#可以使用var声明临时变量,例如:
var i=10;
并且var在编译时会被推断为正确的类型,所以在运行时不会引入额外的性能开销。var声明临时变量只会影响代码的可读性和可维护性(双刃剑)
3.变量类型
三、变量的本质
1.变量的存储空间
可以通过sizeof方法得到变量类型所占的内存空间(字节数),但不能得到string类型的(字符串类型的长度是变化的)
int sbyteSize=sizeof(sbyte);
Console.WriteLine("sbyte 所占的字节数为:"+sbyteSize);
2.变量的本质:2进制
变量的本质是2进制(计算机中所有数据的本质都是二进制,是一堆0和1)
数据传递只能通过电信号,只有开和关两种状态,所以就用0和1来表示这两种状态。计算机中的存储单位最小为bit(位),它只能表示0和1两个数字,1bit就是1个数,要么是0,要么是1。
为了方便数据表示,出现一个叫byte(字节)的单位,它是由8个bit组成的存储单位,所以一般说一个字节为8位。
四、变量的命名规范
1.必须遵守的规则
不能重名、不能以数字开头、不能以程序关键字命名、不能有特殊符号(下划线除外)、建议用英文(拼音)表示变量且要有准确的含义
2.常用命名规范
//变量:驼峰命名法(首字母小写,之后单词首字母大写)
int studentName;
//函数、类:所有单词首字母大写
private void MyFunc(){}
public class MyClass{}
五、常量
1.常量的声明
加上const关键字:
const 类型 常量名=初始值
2.常量的特点
(1)必须初始化(2)不能被修改值
六、转义字符
1.转义字符的使用
什么是转义字符:字符串中的一部分,用来表示一些特殊含义的字符,如单引号’、双引号"、空行\n、斜杠\、制表符\t(空一个tab键)、光标退格\b
固定写法:\字符
2.取消转义字符
在string前加@,就会忽略所有转义字符
七、类型转换(不同变量类型之间的相互转换)
1.隐式转换
基本规则:不同类型之间进行自动的转换,但必须是小范围的转到大范围的(大范围装小范围)
(1)相同大类型之间的转换规则
long l=1;
int i=1;
short s=1;
sbyte sb=1;
//不能够用小范围的类型去装大范围的类型
//i=l; 会报错
//int隐式转换为了long
l=i;
(2)不同大类型之间的转换规则
case1: 有符号与无符号之间(正负号)
(a)有符号的是不能隐式转换成无符号的(负数不可能转换过来)
(b)无符号变量可以转为有符号变量,前提是有符号变量的范围涵盖了无符号变量的范围
case2: 特殊类型和其他类型之间
(a)string和bool不参与隐式转换
(b)char可以转为整数,整数可以转为浮点数,反之不能
2.显式转换
基本规则:手动处理,强制转换
(1)括号强转
主要用于数值类型之间的转换,将高精度的类型强制转为低精度的,可能会因范围问题造成结果异常:
变量类型a 变量名=(变量类型a)变量
(2)Parse法
把字符串转为其他类型的方法。注意字符串必须能够转为对应类型(类型与范围都要合法合规),否则会报错 :
变量类型.Parse(“字符串”)
string str1="123";
int i=int.Parse(str1);
//i=int.Parse("123.45");就会报错
(3)Convert法
更准确(比括号强转好)地将各个类型之间进行相互转换(可四舍五入)(如果是字符串转其他类型,也像parse一样要合法合规):
Convert.To目标类型(变量或常量)
int a;
a=Convert.ToInt32(1.45845f);
Console.WriteLine(a);
//布尔类型也可以转为数值类型,true对应1,false对应0
a=Convert.ToInt32(true);
Console.WriteLine(a);
a=Convert.ToInt32(false);
Console.WriteLine(a);
(4)其他类型转string(ToString)
变量.ToString()
string str1=1.ToString();
string str2=true.ToString();
string str3='A'.ToString();
string str4=1.234f.ToString();
int a=123;
string sa=a.ToString();
//当我们进行字符串的拼接时,就自动会调用Tostring :
Console.WriteLine('hello'+123+true);
八、异常捕获
作用:避免当代码报错时,造成程序卡死的情况,可将容易出错的代码放入try语句块中,出现问题了就会跳过这个异常,执行catch中的代码,也可通过变量e打印出具体的错误信息 。
代码示例:
try
{
string str=Console.ReadLine();
int i=int.Parse(str);
Console.WriteLine(i);
}
catch
{
Console.WriteLine("请输入合法数字");
}
九、运算符
1.算数运算符
(1)赋值符号 =
(2)算数运算符 + - * / %
(3)复合运算符 += -= *= /= %=
(4)自增减运算符 i++ i-- ++i --i
【注1】整形变量做除法,默认小数位会丢失,所以要将至少其中一个数加上f
【注2】取余跟乘除的优先级是一样的
【注3】先用再加/减:i++ i--;先加/减再用:++i --i
2.字符串拼接
(1)+号进行拼接
注意字符串中的+是拼接而非运算,并且也可以使用复合运算符
string str1;
str1=""+1+2+3+4;//1234
string str2="string";
str2+=""+1+2+3+4;//string1234
string str3="";
str3 += 1 + 2 +""+ 3 + 4;//334
string str4="";
str4+=1+2+""+(3+4);//37
(2)string.Format(”待拼接的内容”,内容1,内容2,…)
固定规则:想要被拼接的内容用占位符替代{数字},数字是0~n
string str;
str=string.Format("我是{0},今年{1}岁,我想要{2}","feifei","27","学习unity");
(3)控制台打印拼接
(4)StringBuilder.Append(“字符串内容”);
【注1】StringBuilder也可以用来拼接字符串,StringBuilder.Append();
【注2】String每次修改拼接时会重新分配内存空间,产生垃圾,而StringBuilder修改字符串时不会创建新的对象,因此需要频繁修改和拼接的字符串可以用StringBuilder,可以提升性能。但String提供了更多方法供使用,需要使用这些特殊方法来处理一些特殊逻辑时可以使String。
3.条件运算符
条件运算符:用来比较两个变量或常量
(1) >
(2)<
(3)==
(4)!=
(5)>=
(6)<=
【注】char类型可以进行大小比较(会自动转换为ascii码值进行判断),因此要判断某个字符是否在a~z之间就可以将该字符与a、z比较大小
4.逻辑运算符
(1)&& (逻辑与)
(2)|| (逻辑或)
(3)!(逻辑非,对一个bool值取反)逻辑非的优先级较高,要对一个条件运算结果取反的话要打上括号
(4)混合使用优先级:逻辑非 〉逻辑与 〉逻辑或
(5)逻辑运算符短路规则:只要 逻辑与 或着 逻辑或 左边满足了条件(逻辑或有真则真,逻辑与有假则假),后面的结果就不会再计算了。
5.位运算符
用数值类型进行计算的运算符,将数值转换为2进制,再进行运算 。
(1)位与: &
链接两个数值进行位运算,将数值转为2进制,有0则0。多个数值进行位运算,没有括号时,从左到右依次计算
int a=1;//001
int b=5;//101
int c=a&b;//001
(2)位或:|
对位运算,有1则1
int a=1;//001
int b=5;//101
int c=a|b;//101
(3)异或:^
对位运算,相同为0,不同为1
int a=1;//001
int b=5;//101
int c=a^b;//100
(4)位取反:~
0变1,1变0,需要注意的是要把前面补全,比如int类型有32位,第一位是正负符号,在取反后还要用反码补码
(5)左移<< 右移 >>
左移:让一个数的2进制数左移几位,右侧增加几个0
右移:右移几位,右侧去掉几个数
6.三目运算符
固定语法:bool类型(bool变量/条件表达式/逻辑运算符) ? bool类型为真返回的内容 :bool类型为假返回的内容
string str=false ? "条件为真":"条件为假";
Console.WriteLine(str);
int a=5;
string str=a<10 ? "a小于10":"a大于等于10";
Console.WriteLine(str);
int i=a>1 ? 123:234;
十、条件分支语句
1.if
(1)if语句
if语句:让顺序执行的代码产生分支,满足条件时多执行一些代码,可以无限嵌套
固定语法:
if(bool类型值)
{
满足条件要执行的代码,写在if代码块中;
}
(2)if else语句
if else语句:产生两条分支,满足条件做什么,没满足条件又做什么,可以嵌套
固定语法:
if(bool类型值)
{
满足条件要执行的代码;
}else
{
不满足第一个条件要执行的代码;
}
(3)if else if else语句
if else if else语句:产生n条分支,最先满足哪条分支的条件就执行该分支内的语句(其中最后那个else可以省略)
固定语法:
if(bool类型值)
{
满足条件要执行的代码;
}else if(bool类型值)
{
满足条件要执行的代码;
}else
{
不满足上述条件要执行的代码;
}
2.Switch
固定语法:
switch(变量)
{
//变量==常量,就满足条件会执行该case和break中的代码
case 常量:
满足条件执行的代码逻辑
break;
case 常量:
满足条件执行的代码逻辑
break;
//case 可以有无数个
default:
如果上面case的条件都不满足,就会执行default中的代码
break;
}
- 1
- 2
- 3
- 4
贯穿举例:
int aa=1;
switch(aa)
{
//不写case后配对的break,就叫做贯穿
//满足1 3 4 2其中一个条件,就会执行之后的代码
case 1:
case 3:
case 4:
case 2:
Console.WriteLine("是个数字");
break;
default:
break;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
十一、循环语句
1.while
固定语法:
while(bool类型值)
{
当满足条件时就会执行while语句块中的代码
...
...
...
当代码逻辑执行完,会回到while循环开头,再次进行条件判断
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
【注】流程控制关键字:continue和break。
continue后的语句都不会执行了,但会回到循环开始继续执行,break是直接跳出循环
//打印1到20之间的奇数
int index=0;
while(index<=20)
{
++index;
if(index%2==0){
continue;}
Console.WriteLine(index);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.do while
先斩后奏,先至少执行一次循环语句中的代码,再去判断是否继续(实际开发中使用较少)
固定语法:
do
{
要循环执行的逻辑;
}while(bool类型值);
- 1
- 2
- 3
- 4
【注1】do while语句在while后存在一个很重要的分号“;”,没写会报错
【注2】使用continue会回到while条件判断处
- 1
- 2
3.for
一般用来准确得到一个范围中的所有数
固定语法:
for(初始表达式;条件表达式;增量表达式)
{
循环代码逻辑;
}
//初始表达式:就是申明临时变量,用来计数,可以连续声明用逗号隔开
//条件表达式:进入循环的条件,只要是bool类型值都可以
//增量表达式:执行一次循环逻辑过后要做的事情,做啥都行,一般是进行自增减运算
for(int i=0,j=0;i<10&&j<5;++i,j+=i){}
//for循环可以嵌套,但声明的变量不能是同一个
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
Console.WriteLine(i+"_"+j);
}
}
//这三个空可以为空
int k=0;
for(;k<10;)
{
++k;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
4.foreach
int scoreSum=0;
int[] myClassScores = new int[] { 90, 86, 87, 98, 100 };
foreach (int score in myclassScores)
{
scoreSum += score;
}
- 1
- 2
- 3
- 4
- 5
- 6
总结
Chapter01(C#入门)中主要介绍了c#中变量、常量、转义字符、类型转换、异常捕获、运算符、条件分支语句与循环语句的语法知识内容。特别是变量类型、类型转换、运算符和条件、循环语句在后续开发中运用的非常多。