C#语言入门

发布于:2024-05-08 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、基础知识

1. 程序语言是什么

用于人和计算机进行交流,通过程序语言让计算机能够响应我们发出的指令

2. 开发环境

IDE,集成开发环境。它就是一类用于程序开发的软件,这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工具,只要安装的这种软件我们就可以进行程序开发了。

它的主要作用简单讲就是让计算机能识别你写的程序代码,能够响应你输入的代码命令,听从你的指令和你进行交流。

二、第一个应用程序

1. VS窗口基本介绍

右侧解决方案资源管理器,显示文件夹结构。cs结尾为脚本文件

上方为菜单栏,常用为保存、全部保存、调试、运行(不调试)、注释、取消注释

2. 注释

注释就是对代码的解释和说明,其目的是让人们能够更加轻松的了解代码,注释内容不会被程序识别,只起到说明作用。快捷键Ctrl+E、C注释,快捷键Ctrl+E、U取消注释。

注释的三种方式:

  1. 两杠注释:用于注释一行信息
  2. 星号注释:用于注释多行信息
  3. 三杠注释:用于注释类、命名空间、方法等等

3. 认识程序文件的基本结构

程序写在语句块中。被大括号包裹的部分称为语句块,不同语句块中书写的代码规则不一样。

大致分为命名空间代码块、类代码块、方法代码块。

程序语句固定写法:完成一句命令书写后,用英文分号结束。语句中的标点符号用英文符号

4. 控制台输入打印基础语句

Console.WriteLine("Hello World“);        //在控制台打印一行信息 打印信息结束后,自动空一行

Consle.write("Hello World“);        //在控制台打印信息,结束后不空行

Console.ReadLine();        //检测输入的代码

Consle.ReadKey();        //检测按键

char c=Console.ReadKey().KeyChar;

三、变量

1. 折叠代码

主要作用是让我们编程时逻辑更加清晰

#region

#endregion

2. 如何申明变量

变量:可以变化的容器,变量就是用来存储各种不同类型数值的一个容器,不同变量类型可以存储不同类型的值

语法:变量类型 变量名 = 初始值;

语法:变量类型 变量名 = 初始值, 变量名 = 初始值, 变量名 = 初始值...;

3. 变量类型

  1. 有符号的整形变量:是能存储一定范围正负数,包括零的变量类型,sbyte、int、short、long
  2. 无符号的整形变量:是能存储一定范围正数和零的变量类型,byte、uint、ushort、ulong
  3. 浮点数(小数):float存储7/8位有效数字,根据编译器不同,有效数字也可能不一样,抛弃的数字会四舍五入;double存储15~17位有效数字,抛弃的数字会四舍五入;decimal存储27~28位有效数字
  4. 特殊类型:bool表示真假;char是用来存储单个字符的变量类型;string是字符串类型,用来存储多个字符,没有上限

4. 变量大小

sizeof(变量类型)可以得到该变量类型所占空间大小(单位字节)

C#中char占两个字节,bool占一个字节。sizeof不能得出string类型所占空间大小

5. 变量命名规范

必须遵守的规则:

  1. 不能重名
  2. 不能以数字开头
  3. 不能使用程序关键字命名
  4. 不能有特殊符号(下划线除外)

建议的命名规则:变量名要有含义,用英文(拼音)表示变量的作用。非常不建议的命名规则,用汉字命名

常用命名规则:

驼峰命名法,第一个单词的首字母小写之后,单词首字母大写(变量)

帕斯卡命名法,所有单词首字母都大写(类、方法)

四、常量

1. 基础语法

语法:const 变量类型 变量名 = 初始值;

2. 常量特点

  1. 必须初始化
  2. 不能被修改

作用:申明一些常用不变的变量

五、转义字符

1. 转义字符的使用

什么是转移字符?它是字符串的一部分,用来转变原符号意思

转义字符 释义
\? 书写连续多个问号的时候使用,防止被解析成三字母词
\' 用于表示字符常量'
\" 用于表示字符常量"
\\ 用于表示一个反斜杠,防止被解释成一个转义序列符
\a a警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\0 空字符

2. 取消转义字符

语法:在声明字符串的前面加@符号:string str=@"aaaaaa\aaa";

六、类型转换

1. 隐式转换

隐式转换的基本规则:不同类型之间自动转换,大范围装小范围

相同大类:

long->int->short->sbyte

ulong->uint->ushort->byte

double->float(decimal不能隐式转换)

不同大类:

double->float->整数(有符号和无符号)->char

decimal->整数(有符号和无符号)->char

string和bool不参与隐式转换

有符号的变量是不能够隐式转换成无符号的

有符号的变量能够装无符号的变量,但前提是无符号的变量范围必须全部都在有符号的变量范围内

浮点数是可以装载任何类型的整数(decimal也可以装载任意整型),但整数不能够装载浮点数

char能够隐式转换为部分整型和浮点数,是因为char类型是一个16位无符号整数,以ASCII码值的形式转换

long l = 1;
int i = 1;
short s = 1;
sbyte b = 1;

//隐式转换
l = i;

2. 显式转换

括号强转主要是数值之间的转换,Parse主要是string转为数值,Convert主要是更准确的将各个类型之间进行相互转换

2.1 括号强转

作用:一般情况下,将高精度的类型强制转换为低精度

语法:变量类型 变量名 = (变量类型)变量;

注意:转换的时候要注意精度问题范围问题

括号强转可能会出现范围问题,造成异常

bool和string不能通过括号的方式强转

2.2 Parse法

作用:把字符串类型转换为对应的类型

语法:变量类型.Parse("字符串")

注意:字符串必须能够转换成对应类型,否则会报错;转换后的值必须是在该类型的范围内,否则报错

2.3 Convert法

作用:更准确的将各个类型之间进行相互转换,会四舍五入

语法:Convert.To目标类型(变量或常量)

注意:填写的变量或常量必须正确,否则出错

Convert.ToInt32()和Int.Parse()对于空值(null)的处理不同,Convert.ToInt32(null)会返回0而不会产生任何异常,但Int.Parse(null)则会产生异常。

2.4 其他类型转string

  1. 拼接打印
  2. 变量或常量.ToString();

七、异常捕获

通过对异常捕获的学习,可以避免当前代码报错时,造成程序卡死的情况

1. 基本语法

 //必备部分
 try
 {
     //希望进行异常捕获的代码块
     //放到 try 中
     //如果 try 中的代码报错了,不会让程序卡死
 }
 catch
 {
     //如果出错了,会进入执行 catch 中的代码来捕获异常
     //catch(Exception e)具体报错跟踪,通过 e 得到具体的错误信息
 }
 //可选部分
 finally
 {
     //最后执行的代码,不管有没有出错,都会执行其中的代码
 }

八、运算符

1. 算术运算符

算术运算符是用于数值类型变量计算的运算符,它的返回结果是数值

1.1 赋值符号

=:先看右侧,再看左侧,把右侧的值赋给左侧的变量

1.2 算术运算符加、减、乘、除、取余

x*y 乘法
x/y 除法
x%y 求余
x+y 加法、字符串串联
x-y 减法

1.3 算术运算符的优先级

优先级是指在混合运算时的运算顺序,乘除取余优先级高于加减,先算乘除取余后算加减。

括号可以改变优先级,优先计算括号内内容。多组括号先算最里程,括号依次往外算。

1.4 算术运算符的自增减

++x 前增量,先加再用
--x 前减量,先减再用
x++ 后增量,先用再加
x-- 后减量,先用再减

2. 字符串拼接

2.1 字符串拼接方式1

string 不存在算术运算符,不能计算,但是可以通过加号来进行字符串拼接

string str="123"; str=str+1;

str+=1+2+3;        //先计算一加二加三,然后再进行字符串拼接

2.2 字符串拼接方式2

语法:string.Format("带拼接的内容{0},{1}",内容一,内容二,.....);        想要被拼接的内容,用占位符代替{数字},数字从零开始

2.3 控制台打印拼接

Console.WriteLine("带拼接的内容{0},{1}",内容一,内容二,.....);        想要被拼接的内容或变量,用占位符代替{数字},数字从零开始

Console.WriteLine($"{内容一}+{内容二}");        括号中可以直接填写要拼接的变量

3. 条件运算符

3.1 条件运算符的基本应用

x<y 小于
x>y 大于
x<=y 小于等于
x>=y 大于等于
x==y 等于
x!=y 不等于

3.2 各种应用写法

  1. 变量和变量比较
  2. 变量和数值比较
  3. 数值和数值比较
  4. 计算结果比较(条件运算符的优先级低于算术运算符)

3.3 不能进行范围比较

不能写成类似1<a<2的形式

3.4 不同类型之间的比较

不同数值类型之间可以随意进行条件运算符比较,例如:int类型可以和float类型比较;string、bool只能同类型进行==、!=比较;char不仅可以和自己类型进行==、!=比较,还可以和数值类型进行大小比较

4. 逻辑运算符

!x 逻辑求反
x&&y x和y都为true时,才为true(仅当x为true,才对y求值)
x||y x或y为true时,就为true(仅当x为false,才对y求值)

4.1 逻辑与

逻辑运算符优先级低于条件运算符算术运算符

4.2 逻辑或

逻辑或优先级低于逻辑与

4.3 逻辑非

逻辑非优先级高于逻辑与

4.4 混合使用优先级问题

逻辑非优先级最高,逻辑与优先级高于逻辑或

逻辑运算符优先级低于算术运算符、条件运算符(逻辑非除外)

4.5 逻辑运算符的短路规则

5. 位运算符

位运算符,主要用数值类型进行计算。将数值转换为二进制,再进行位运算

x&y 整型按位AND,布尔逻辑AND
x|y 按位或
x^y 按位异或
~x 按位求反
x<<y 位左移
x>>y 位右移

5.1 位与

将数值转换为二进制进行位运算。对位运算,同为1则为1,否则为0

int a=3; int b=19;

int c=a&b;        //3

5.2 位或

将数值转换为二进制进行位运算。对位运算,有1则为1,否则为0

a=1; b=3;

c=a|b;        //3

5.3 异或

将数值转换为二进制进行位运算。对位运算,不同为1,相同为0,也可以理解为二进制不进位相加

a=1; b=5;

c=a^b;        //4

5.4 位取反

写在数值前,将数值转换为二进制,对位运算,0变1,1变0

a=5;

c=~a;        //-6

5.5 左移和右移

让一个数的二进制数进行左移或右移。左移几位,右侧加几个0;右移几位,右侧去掉几个数。

6. 三目运算符

x?y:z 如果x为true,则对y求值;如果x为false,则对z求值。注意yz结果类型必须一致

九、条件分支语句

作用:让顺序执行的代码产生分支

1. if语句

if(bool类型){}

if(bool类型)
{}
else
{}
 
if(bool类型)
{}
else if(bool类型)
{}
else
{}

2. switch语句

switch(变量)
{
    case 常量:
        ...
        break;
    case 常量:
        ...
        break;
    case 常量:
        ...
        break;
    default:        //可省略
        ...
        break;
}

其中常量只能写一个值(也可以是const自定义常量),不能写范围。一般配合枚举使用。

贯穿:不写 case后面配对的 break 就叫贯穿

switch(变量)
{
    case 常量1:
    case 常量2:
    case 常量3:
        ...
        break;      //此时等于123会进行相同的处理
    default:        //可省略
        ...
        break;
}

十、循环语句

作用:让顺序执行的代码可以不停地循环执行某一代码块的内容

1. while循环

while(bool类型值)    //若bool值恒为true,则为死循环,所以循环体中要记得写跳出循环的值的变化
{}

流程控制关键词:

break 跳出循环

continue 回到循环开始继续执行

注意: break 和 continue 主要是和循环配合使用的,和 if 语句没有关系。break 在 switch 中的作用和 while 循环中的作用有异曲同工之妙。

2. do while循环(使用较少)

do
{}while(bool类型值);    //注意结尾处有分号,循环体中要记得写跳出循环的值的变化

while 循环是先判断条件再执行。do while 循环是先斩后奏,至少执行一次循环语句块中的逻辑,再判断是否继续。

3. for循环

for( 初始表达式 ; 条件表达式 ; 增量表达式 )
{ 循环内容 }

与while对比:

for 循环,一般用来可以准确得到一个范围中的所有数,相对while循环更简洁。

十一、补充

1. 控制台相关

1.1 输入存储

char c=Console.ReadKey(true).KeyChar;        //不会吧输入的内容显示在控制台中,但还是会存储

1.2 清空

Console.Clear();

1.3 设置控制台大小

注意分为窗口大小和缓冲区大小,先设置窗口大小,再设置缓冲区大小;缓冲区大小不能小于窗口的大小,窗口的大小不能大于控制台的最大尺寸。        Console.SetWindowSize(100,50);        Console.SetBufferSize(100,50);

1.4 设置光标的位置

控制台左上角为原点0,0,右侧是 x 轴正方向,下方是 y 轴正方向。

横纵距离单位不同,视觉上1y=2x。

Console.SetCursorPosition(0,1);        //设置光标位置

1.5 设置颜色相关

文字颜色设置:Console.ForegroundColor = ConsoleColor.Red;

背景颜色设置:Console.BackgroundColor = ConsoleColor.White;        //重置背景颜色过后,需要 clear 一次才能改变背景颜色

1.6 光标显隐

Console.CursorVisible = false;

1.7 关闭控制台

Environment.Exit(0);

2. 随机数

Random r = new Random();

int i=r.Next();        //若填写一个数字num,则生成0~num-1的随机数(左包含右不包含)

//若填写两个数字num1、num2,则生成num1~num2-1的随机数(左包含右不包含)