C#语言入门

一、基础知识

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. 转义字符的使用

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

转义字符释义
\?书写连续多个问号的时候使用,防止被解析成三字母词
\'用于表示字符常量'
\"用于表示字符常量"
\\用于表示一个反斜杠,防止被解释成一个转义序列符
\aa警告字符,蜂鸣
\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&&yx和y都为true时,才为true(仅当x为true,才对y求值)
x||yx或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的随机数(左包含右不包含)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32独立看门狗,实现单片机自动重启

今天学习了一下独立看门狗&#xff0c;看门狗的主要作用就是防止程序中有死循环或是不知道的bug&#xff0c;而造成在while循环中没有及时喂狗&#xff0c;程序就会控制单片机重启复位&#xff0c;从而不至于影响程序一直不能正常工作。 其实看门狗的应用也不是很复杂&#xf…

1020. 【USACO题库】2.1.1 The Castle城堡

题目描述 以一个几乎超乎想像的运气,农民约翰在他的生日收到了一张爱尔兰博彩的奖券。 这一张奖券成为了唯一中奖的奖券。 农民约翰嬴得爱尔兰的乡下地方的一个传说中的城堡。 吹牛在他们威斯康辛州不算什么,农民约翰想告诉他的牛所有有关城堡的事。 他想知道城堡有多少房间…

光伏光热一体化技术PVT

1、PVT集热器简介 太阳能光伏光热一体化组件主要由光伏与光热两个部分组成。光伏部分采用技术成熟的太阳能光伏面板&#xff0c;通过控制系统为建筑提供所需电能&#xff0c;主要包括光伏电池、蓄电池、逆变器和控制器等构件。光热部分主要为集热器&#xff0c;将太阳能转换为热…

力扣例题(接雨水)

链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路&#xff1a; 判断一块地方是否可以接到雨水&#xff0c;只需要判断他是否有左右边界使他可以接到水 左右边界分别为此处左侧的最高点和右侧的最高点 同时此处可接雨水的高度为左右两…

基于Pytorch深度学习——GPU安装/使用

本文章来源于对李沐动手深度学习代码以及原理的理解&#xff0c;并且由于李沐老师的代码能力很强&#xff0c;以及视频中讲解代码的部分较少&#xff0c;所以这里将代码进行尽量逐行详细解释 并且由于pytorch的语法有些小伙伴可能并不熟悉&#xff0c;所以我们会采用逐行解释小…

《QT实用小工具·四十九》QT开发的轮播图

1、概述 源码放在文章末尾 该项目实现了界面轮播图的效果&#xff0c;包含如下特点&#xff1a; 左右轮播 鼠标悬浮切换&#xff0c;无需点击 自动定时轮播 自动裁剪和缩放不同尺寸图片 任意添加、插入、删除 单击事件&#xff0c;支持索引和自定义文本 界面美观&#xff0c;圆…

开源免费的网盘项目Cloudreve,基于Go云存储个人网盘系统源码(七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive)

项目简介&#xff1a; 在现今的网盘服务中&#xff0c;用户经常遭遇限速和价格上涨的问题&#xff0c;这无疑增加了使用上的困扰。 为此&#xff0c;我今天要介绍一款开源且免费的网盘项目——Cloudreve。 这个项目是基于Go语言开发的云存储个人网盘系统&#xff0c;支持多种…

[笔试训练](十二)

目录 034:删除公共字符串 035:两个链表的第一个公共节点 036:mari和shiny 034:删除公共字符串 删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题解: 用哈希记录好第二个字符串中的字符&#xff0c;再遍历一遍第一个字符串&#xff0c;只将没有记录的字符加在结果字符串上。…

[C++][数据结构]哈希1:哈希函数的介绍与线性探测的实现

前言 学完了二叉树&#xff0c;我们要学当前阶段数据结构的最后一个内容了&#xff1a;哈希&#xff01;&#xff01; 引入 先来介绍两个用哈希封装的两个容器&#xff1a;unordered_map unordered_set 与map和set的不同&#xff1a; map/set是双向迭代器&#xff0c;而另…

【已解决】VSCode 连接远程 Ubuntu :检测到 #include 错误。请更新 includePath。

文章目录 1. 环境声明2. 解决过程 1. 环境声明 即使是同一个报错&#xff0c;在不同的环境中&#xff0c;报错原因、解决方法都是不同的&#xff0c;本文只能解决跟我类似的问题&#xff0c;如果你发现你跟我遇到的问题不太一样&#xff0c;建议寻找其他解法。 必须要吐槽的是…

STD10A230XCB电源模块STD05A230XCB整流模块介绍

STD10A230XCB电源模块STD05A230XCB整流模块介绍&#xff0c;直流屏电源模块STD05A230XCB&#xff0c;整流模块STD10A115XCB&#xff0c;STD20A115XCB&#xff0c;STD10A230X&#xff0c;STD05A230X&#xff0c;直流屏充电模块的关键词: 电力智能高频开关充电模块STD20A230XCB,高…

【科研技术】华为为什么不给微信特权?

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C语言/数据结构——每日一题(移除链表元素)

一.前言 今天在leetcode刷到了一道关于单链表的题。想着和大家分享一下。废话不多说&#xff0c;让我们开始今天的知识分享吧。 二.正文 1.1题目要求 1.2思路剖析 我们可以创建一个新的单链表&#xff0c;然后通过对原单链表的遍历&#xff0c;将数据不等于val的节点移到新…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端&#xff0c;支持拖拽上传、剪贴板上传&#xff0c;功能十分方便。 下载地址&#xff1a; https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

了解并学会使用反射

目录 一、反射的应用场景&#xff08;简单了解&#xff09; 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一&#xff1a;forName&#xff08;&#xff09;&#xff1a; 方式二&#xff1a;封装类.Class&#xff1a; …

【stomp 实战】Spring websocket 用户订阅和会话的管理源码分析

通过Spring websocket 用户校验和业务会话绑定我们学会了如何将业务会话绑定到spring websocket会话上。通过这一节&#xff0c;我们来分析一下会话和订阅的实现 用户会话的数据结构 SessionInfo 用户会话 用户会话定义如下&#xff1a; private static final class Sessio…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

VMware虚拟机中ubuntu使用记录(4)—— 如何在VMware虚拟机中调用本机电脑的摄像头

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、虚拟机调用本机摄像头(1) 启动VMware USB 服务(2) 连接本机摄像头(3) 测试摄像头的连接 前言 通过配置虚拟机调用本机摄像头&#xff0c;用户可以在虚拟机…

Redis---------实现商品秒杀业务,包括唯一ID,超卖问题,分布式锁

订单ID必须是唯一 唯一ID构成&#xff1a; 代码生成唯一ID&#xff1a; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.tim…