C#基础笔记
VS快捷键
Ctrl+K,C 注释代码
Ctrl+K,U 反注释
Ctrl+E,D 格式化代码(vs2012版)
Ctrl+k,F格式化代码(vs2019版)
全选:Ctrl+a
返回上一步操作:Ctrl+z
调试:F5
直接运行(不调试):Ctrl+F5
标识符命名规范
第二章 变量、数据类型和运算符
2.1 变量
2.1.1 变量的命名
命名:遵循骆驼命名法。
组成:以字母、下划线、“@”开头,后面可以接任意多个数字、字母、下划线。
若与C#中的关键字相同,则需在前面加“@”。
C#中区分大小写。
见名知意。
骆驼命名法(驼峰命名法):首单词首字母小写,其余单词首字母大写。
帕斯卡命名法:每个单词首字母都大写。
方法名、类名遵循帕斯卡命名法。
2.2 数据类型
2.2.1 数据类型的分类
C#中的数据类型分为值类型和引用类型。
(1)值类型
数值型:整型(8种)、浮点型(2种)、decimal
字符型:char
布尔类型:bool
(2)引用类型:string
sbyte:存储8位有符号整数,取值范围是:-2的7次方至2的7次方-1。
byte:存储8位无符号整数,取值范围是:0至2的8次方-1。
float、double、decimal三种类型表示的都是有符号数。
float:单精度浮点型,7位有效数字,小数点后最多能保留7位小数,值后面需要加F/f。(当整数部分为0时,小数部分最多只能保留7位;当整数部分有1位大于0的数时,小数部分最多只能保留6位;当整数部分有2位数时,小数部分最多只能保留5位。)
double:双精度浮点型,15位有效数字,小数点后最多能保留15位小数,值后面可以加上D/d,也可以不加。。(当整数部分为0时,小数部分最多只能保留15位;当整数部分有1位大于0的数时,小数部分最多只能保留14位。)
decimal:十进制类型,28位有效数字,用于金融和货币方面的计算,值后面需要加M/m。(小数点后最多能保留28位小数)
char:字符型,16位的Unicode字符,使用单引号引起来的单个字符。
bool:布尔型,1位,只有2个值,即true和false。
string:字符串,引用类型,使用双引号引起来的多个字符的集合。
2.3 转义字符
常用的转移字符如下:
\n:换行;
\t:水平制表符;
\':单引号;
\":双引号;
\\:\
示例:
使用换行符输出信息。
string brand="爱国者F928";
double weight=12.4;
string type="内置锂电池";
int price=499;
Console.WriteLine("品牌(brand):{0}\n重量(weight):{1}\n电池类型(type):{2}\n价格(price):{3}", brand,weight,type,price);
2.4 隐式声明变量
C#3.0或以上的版本支持;
在C#3.0中声明一个变量时,可以不明确指定它的数据类型,而使用关键字"var"来指定变量的类型。该变量实际的数据类型将在其初始化的表达式中推断出来。
2.5 常量
常量,其值在使用过程中固定不变的量。在数据类型前加const关键字即可,语法如下:
const 数据类型 常量名称 =常量值;
注意:
(1)常量必须在声明时初始化,并且指定了值后,就不能再修改了。
(2)常量的值不能用一个变量来初始化(赋值)。
2.6 不同数据类型之间的类型转换
1.字符串和数值型之间的转换
(1)字符串型转成数字型:
方式一:xx.Parse(string_value) 将字符串转换为数字型,xx可以为int、float、double。
方式二:Convert.ToXX(value)
(2)将数字型转换为字符串型:
xx.ToString()
Convert.ToString(xx)
2.7 运算符
2.7.1 算术运算符
+、-、*、/、%、++、--
++和--:
若其在操作数之前:先执行自加1/自减1,然后再做其他操作。
若其在操作数之后:先做其他操作,再执行自加1/自减1。
2.7.2 赋值运算符
(1)基本赋值运算符
=
(2)复合赋值运算符
+=、-=、*=、/=、%=
2.7.3 关系运算符
>、<、==、>=、<=、!=
2.7.4 逻辑运算符
&& 与
|| 或
! 非
2.7.5 三元运算符(条件运算符)
条件表达式 ? 表达式1 : 表达式2 //条件表达式为true时取值表达式1,否则取值表达式2。
Console.WriteLine("请输入你的年龄:");
//获取用户输入的信息
string str=Console.ReadLine();
//int age = int.Parse(str);
int age = Convert.ToInt32(str);
//string result= age >= 18 ? "可以适量饮酒" : "禁止饮酒";
//int result=age >= 18 ? 1 : 0;
char result=age >= 18 ? '是' : '否';
Console.WriteLine(result);
第三章 选择结构
3.1 程序结构
顺序结构
选择结构
循环结构
3.2 选择结构
3.2.1 if语句
基本if语句
多重if语句
嵌套if语句
3.2.2 switch语句
在C# 6及更早版本中,使用switch语句时,有以下限制:
(1)匹配表达式必须是以下任一种类型:
字符型、字符串型、布尔型、整数类型、枚举类型;
(2)case标签中只允许使用常数表达式。
从C# 7.0开始,switch语句支持模式匹配。
具体可以参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/statements/selection-statements
if语句和switch语句的异同:
if语句既可以用于对某个具体值的判断,还可以用于对某个范围的判断。
switch语句只能用于等值判断。
while和do..while循环:
第四章 循环一
第五章 循环二
for循环:
for循环语法
for(初始化表达式;条件表达式;操作表达式)
{
循环体
}
for(初始化语句;条件判断语句;循环控制语句)
{
循环体
}
for后面的小括号里面的三个表达式,可以省略不写,而写到其他地方,但两个分号必须保留。
continue
终止当次循环,进入下一次循环。
break:
跳转语句,用于跳出循环。
数组:
数组属于引用类型,用于存储相同类型的多个数据 。
冒泡排序:
方法:一个方法是把一个相关的语句组织在一起,用来执行一个任务的语句块。
public static 返回值类型 方法名([参数列表]){
//这里编写方法的主体
【return】
}
方法重载:
在同一个类中,出现多个方法,其方法名相同,但参数列表不同的现象称为方法重载。
注意:
参数列表不同又分为两种情况:
(1)参数的个数不同;
(2)参数的类型不同;
类的对象:
构造方法:
无参构造方法:c#系统默认提供,但当写了其他的构造方法后,系统就不在提供构造方法。
第八章类和对象
8.1 属性
属性分为三类:
读写属性:有get访问器和set访问器。
只读属性:只有get访问器,只能获取属性的值,不能对属性赋值。
只写属性:只有set访问器,只能对属性赋值,不能获取属性的值。
8.2 枚举
枚举的关键字是enum;
每一个枚举值对应有一个常数值,常数值的类型为int型,且默认从0开始;
枚举值不能相同,但不同的枚举值可以有相同的常数值。
第九章 C#面向对象深入
9.1 结构体
结构体与类的异同
不同点:
类:
(1)属于引用类型,存储在堆中;
(2)可以被继承;
(3)可以添加默认的无参构造函数;
(4)创建对象必须使用new;
(5)类中可以给字段赋值。
结构体:
(1)属于值类型,存储在栈中;
(2)不能被继承;
(3)有默认的无参构造方法,但不能显式的在结构体中写出来;
(4)结构中只有字段没有属性时,可以不使用new来创建对象;
(5)结构中不能给字段赋值。
相同点:
(1)都可以包含字段、属性和方法;
(2)都可以实现接口。
抽象方法
///
/// 动物类(定义成抽象方法)
/// 抽象方法所在的类一定是抽象类,但抽象类里面不一定有抽象方法。
///
接口
接口的关键字是interface
接口中的方法默认使用“public” 修饰,定义的变量默认是用“punlic static final”来修饰.
由于接口中的方法都是抽象方法,因此结构不能被实例化,也就不能通过实例化对象的方式来调用接口中的方法.,此时需要定义一个类来实现接口中的方法.
一个类可以实现多个接口,被实现的接口间要用逗号隔开
一个接口还可以去继承另一个接口.
抽象类和接口的对比
抽象类 接口
不同点:1.用abstract定义 用interface定义
2.只能继承一个类 可以实现多个接口
3.非抽象派生类必须实现抽象方法 实现接口的类必须实现接口的所有成员
4.抽象类中的子类需要使用override 直接实现
实现抽象类抽象方法
5.抽象类中不一定包含未实现的方法
接口中的方法一定包含未实现的
相同点:1.不能实现实例化
2.派生类必须实现未实现的方法
第十二章 常用类
12.6 正则表达式
正则表达式:用于字符匹配,验证数据的合法性,需要引入命名空间:using
System.Text.RegularExpressions;
如果要把一个正则表达式重复用于不同的字符串来进行匹配,就需要创建一个Regex类的对象;
如果正则表达式只使用一次,就使用Regex类的静态方法。
Regex.Split(string input,string pattern);//拆分字符串方法返回的是一个字符串数组
Match类和MatchCollection类:能让我们知道匹配的细节。
正则表达式的字符:
^ :匹配以什么开头(^不在[]里面的用法)
$ :匹配以什么结尾
\d:匹配一个十进制数字字符,等价于[0-9] (\D匹配一个非数字字符,等价于[^0-9])
\w:匹配含下划线在内的任何一个单词字符,等价于[a-zA-Z0-9_]
字母,汉字,数字,字符
\W:匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’
\b:匹配一个单词边界,也就是指单词和空格间的位置。
\B:匹配非单词边界。
{n}:匹配前一个元素n次。
{n,m}:匹配前一个元素至少n次,但不多于m次。
. :通配符,匹配除换行符\n外的任意字符
| :匹配以|分隔的任何一个元素,即或者的关系,比如x|y 匹配x或y
当i=5时会引发异常,catch块中有return语句时对应的顺序:try块引发异常-->执行catch块中的代码,至return语句的前一行-->执行finally块中的代码-->在执行catch块中的return语句
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App