c#笔记
语法
一、 字符串一定要用双引号包裹起来
“”<--错误的双引号(因为是中文的)
""<--正确的双引号(因为是英文的)
所以语法为:"Hello World!!!","世界你好"。
二、 使用Console.WriteLine/Write 输出时记住:只要是字符串就要用双引号包裹,数字可以直接写上
通俗的说就是如果我们想要将某些信息显示到控制台的窗口中,那么我们就用输出函数:Console.WriteLine(换行输出)或Console.Write(不换行输出)
三、 在C#中引号是属于特殊字符,是在程序中已经被定义过了的,因此如果要想使用这些特殊字符就必须使用“转义字符”将特殊的字符转为普通字符
using c:;<--导入c盘目录
namespace 我的目录
l C#程序的结构
- 导入命名空间
- 自定义命名空间
- 自定义类名称
- 主函数\主方法(程序的入口点)
- 程序的主体代码
l 语法元素
- 语句:每条完整的语句一定是用分号结束
- 注释:单行注释(//表示注释一行),多行注释(/**/多行注释),块注释(///表示块注释)
- 关键字:是系统事先定义好的单词或字母,有特殊用途。一般以蓝色表示
- 标识符:用于表示某种含义的符号(例如:你的姓名代表着你这个人)
- 括号:C#中有三种括号:小括号、中\方括号、大括号\花括号
- 空白字符:作用是美化代码,方便我们阅读。
数据类型
l C#中数据类型按照数据存放的位置可分为
- 值类型存放在“栈”中,空间小但是速度快不够灵活
- 引用类型存放在“堆”中,空间大,很灵活,但是速度慢
=============================
○ “栈”,内存中专用的一块空间
○ “堆”,将磁盘的一块区域当成内存使用
================================
○ 值类型:
1、整数(有正负符号)
int 负的2的31次方到正的2的31-1次方
记忆的方法就是记忆整数类型位长。
分别是:8,16,32,64
2、小数
小数的位长:32、64、128
===============================
l 字符:16位Unicode字符?
英文每个字母都是8位表示,汉字都是双字节表示那么也就是8位乘以2也就是16位
例如:'H','e','l','l',' ','W','o','r','l','d'<--这些都是单个字符
l 字符串:一连串的Unicode字符组成的内容
例如:"Hello World!!!,世界,你好"<--这就是一个字符串,也就是一连串的字符组成。
"H"<--双引号包裹的一个字符,也是字符串。只要是双引号包裹的内容都是字符串,单引号包裹的只能是一个字符,多于一个字符被单引号包裹的就是语法错误,例如:'ab'<--这是一个错误
==========================
l object 类型是祖先类型,是所有类型的根。
变量
l 什么是变量?
○ 变量就是内存中的一块空间,用于存放数据。相当于数学中的X。
○ 变量本身只是这个内存空间的一个指向(名称)
------------------
l 为什么说变量是有类型的?
因为有数据类型,变量就也要分类型
l 使用变量的步骤:
- 定义变量
- 声明变量(开辟内存空间)
- 初始化变量(为变量第一次赋值,变量如果没有赋初值是不能使用的)
- 存取数据
-----------------------
l 语法说明
- int age;age = 18;
- 前面的int代表数据类型是整形,空格后面的age代表变量名称,分号代表语句结束。声明时数据类型和变量名之间的空格是用来给编译器识别前后的
- age = 18;
- 前面的age代表变量名称,等号代表赋值,18代表具体的数据/同类型变量
-------
l 小技巧:
- 使用#region 和 #endregion对之间包裹的代码进行折叠,以获取更大的编写空间
=============================
l 变量命名的规则:
见名之意(见到变量名称就可以知道变量的含义)
有标识的意义,不做无意义的变量名称
l 控制台的输入
控制台的输入使用Console.ReadLine();这个函数完成,它主要是接收用户在控制台的输入,但是用户控制台的输入全部都是字符串,不管用户是输入的数字还是字符,对它来说都是字符串。
当用户输入完成时只有按下回车键才会将输入的信息返回到程序中
======================================
l 选择程序入口函数
由于之前的代码较多所以新建一个启动类用于编写新的代码
但是新类中也有程序入口函数所以必须要进行选择,启动哪个Main函数
设置的位置在解决方案资源管理器中->右键点击项目->选择属性->弹出的面板中选择启动函数
案例:输入学生的信息
string name;char sex;DateTime birth;int cellphone,qq;string email;
输入时需要给用户提示
输出的占位符索引是从0开始的(PS:C#中只要是索引都是从0开始)
--------------------
bug:手机号码使用32位整型数据导致长度不够的异常,
解决方法:
1,修改数据类型为long长整型
2,修改数据类型为字符串
--------------------------
l 什么是常量?
简单的说就是不可变的标识
例如:数字32是不能变的,因为变了就不是数字32了,因此数字32就是一个常量。
l 符号常量:
例如:const int x=12;表示这个x是一个常量,不能更改。
所以声明变量时前面加上const关键字就表示该变量是一个常量
常量语法:
const 数据类型 常量名称 = 值;
常量规则:
一旦声明必须赋值一旦赋值不能更改
-------------------
l 变量和常量使用时机
如果程序中数据需要经常改变则使用变量,如果是不变的数据,例如:圆周率PI,重力加速度G等这些都是不变的,所以使用常量做标识。
运算符
数学中:
是这样的x+y=z;
在开发编程中是这样的:z=x+y;
区别:数学中:= <---是等号,表示左右两边是相等的关系
编程中:= <---是赋值运算符,表示将右边运算结果的值赋给左边的变量
l 赋值运算符:=
l 自运算符:
有两种:++、--
++ 就是每次运算时将变量的值加一个1,
-- 就是每次运算时将变量的值减一个1,
----------------------------
运行中我们需要看到变量的数据变换,借此来检查程序是否正常,所以使用一个叫断点的东西来帮我们。
具体的步骤如下:
光标停在要检查的地方,然后按下F9键打上一个断点,此时此行就会整行变为有一个红色的,同时在前面行号出会出现一个红色的原点,它可以让程序执行到这里的时候停住,这样就方便我们查看变量的值是否是预设值。
当运行到断点处程序停止时,我们就可以看变量的值了。
黄色标注的这一行表示当前程序停止的位置,此时这一行还没有,编译器等待下一步的指令,
有哪些呢?
1、F11单步运行(继续运行一步,逐步运行)
2、F10逐过程运行(如果有函数则直接运行函数而不会运行到函数里面)
3、F5继续运行
------------------------
通过刚才的运行,我们清楚看到了断点处变量的值,
单步调试运行时,变量的值确实是在变化中,但是显示出来的却和我们预设的不同,
---------------------------------------
l 关系运算符:==、!=、>、<、>=、<=
用于比较两个对象的大小、是否相等。
所以其返回的结果是一个布尔值也就是真/假(true/false)
---------------------------------------
l 逻辑运算符:&&、||、!。(与、或、非)
逻辑与&&
bool a=TRUE;
bool b=TRUE;
(a&&b)---->true
a=false;
(a&&b)---->false
逻辑与运算的特点:
只要有一个为假则整个表达式返回结果为假,当第一个操作数为假则直接返回为假,不用再去计算第二个操作数了(短路)。
---------------------------
逻辑或||
(a||b)----->true;
a=false;
(a||b)----->true;
逻辑或运算的特点:
只要有一个为真则整个表达式返回结果为真,当第一个操作数为真则直接返回真,不用再去计算第二操作数(短路)
---------------------------------------------
逻辑非!
就是对布尔值取反,
a=true;
!a ---->false;
a=false;
!a------>true;
----------------------------------------
l 三元运算符
C#中只有一个就是“?:”
<关系表达式1>?<表达式2>:<表达式3>
语法说明:
当关系表达式1的运算结果为真时,返回表达式2的运算结果,否则返回表达式3的结果。
其中的?表示询问关系表达式1的运算结果,
其中的:表示真或假的时候进行结果返回的分割
---------------------------------------------------------------------
逻辑运算符、三元运算符这两种运算符都不是单独使用,
一般是结合其他运算符协同使用。
---------------------------------------------------------------------
当你的程序中有多个Main入口点函数时,你要项目属性中设置其中的一个Main作为程序入口点,当指定多个入口函数中的某一个时,程序就可以通过编译了,也可以正常执行了。
=======================================
运算中,比较难以弄清楚的不多,自运算符、逻辑、三元运算符
注意:
代码中空格会出现一个小圆点,其实是空格的提示,它和真正的点还是有区别的,要注意观察。
复习
l 掌握程序代码的结构
- 导入命名空间 语法:using System;
- 自定义命名空间 语法:namespace 自定义名称
- 程序入口函数(程序入口点)语法: static void Main(string[] args)
- 程序主体代码(需要程序执行功能)
l 高质量的编码准则
目的:提高代码的可读性、可靠性、可维护性、重用性、高效性。
布局这部分。
书写清晰:编写代码时尽量一行一行的写,就算是声明也最好独占一行
标识符规范:见名知意,主要使用在变量、函数(方法)、类型、接口、枚举、结构体、属性。。。
目的:当程序员阅读代码时能够从这些命名上知道这些对象在做什么事,这样一来就大大的节约时间,提高效率。
提示:如果名称太长则可以使用英文缩写,需要进行文档的记录。
良好的注释习惯:变量、函数、类、接口。。。。。当前的类中所有代码的简单说明
目的:提高阅读性
l 注释有三种:
1、单行注释://注释内容
2、多行注释:/*注释内容*/
3、块注释:
/// <summary>
/// 这里描述对象的功能
/// </summary>
/// <param name="args">对象使用时需要使用的参数</param>
===========================================================
l 数据类型
划分方法根据内存的存放位置进行划分
1、值类型 (保存在内存的“栈”中,特点:容量小、速度快、不灵活)
2、引用类型(保存在内存的“堆”中,特点:容量大、速度慢、很灵活)
值类型:
简单类型:其实就是数字类型(整数、小数)
枚举类型:其实就是给一些数字一个命名,方便调用,主要做标识。
结构类型:其实就是把一些内容合到一起然后给一个命名,和类一样但是它是存储在“栈”中。
引用类型:
类类型:其实就是把一些内容合到一起然后给一个命名,它是存储在“堆”中。
数组类型:其实就是一组同类型的数据给一个统一的名称。
接口类型:其实就是定义的一些规则,然后使用时必须遵守这些规则。
委托类型:其实就是将要做的事情交给其他对象去做,而不关心其他对象怎么做,只看结果。
类型转换
数字和数字字符串
数字:1,12,18,20<-----这些都是数字
数字字符串:"12","30","32"<-----这些都是数字字符串
它们的区别在于计算机中的编码不同
由于编码不同所以呢 1="1"<---这个等式是不成立的,当然这里的=号也就是赋值运算符,右边的赋给左边。
int x =2/0.3<----参与运算的操作数类型不同,因此这个表达式是错误,要想这个表达式成立就必须进行类型的转换。
C#中两种类型转换:隐式、显式
隐式:就是一般直接转,不用明显看到就可以成功。
显式:就是明显看出是在做类型转换
------
隐式转换示例:double x;int y=10; x=y;<-----这个表达式是成立的,因为x是浮点,y是整数,而浮点大于整数因此这就发生了隐式转换
-------------
显示转换示例:double x=2.8;int y;y=x;<----此时表达式不成立,要想表达式成功则需要这样写:y=(int)x; <--这样明确指定目标类型(被赋值对象的类型),注意此时不会产生四舍五入,而是直接砍掉小数点后面的
显示转换回导致精度的丢失。
float i = 18.89f ; int j = 3; double m = 5;
j = i + j+m;<---正确的表达式:j = (int)i + j + (int)m;
这就是一种显示转换的方法:(目标类型)变量,
语法示例:int i=0;float j=1.8f;i = (int)j;
第二种:目标值类型.Parse(string类型变量)<---仅对数字字符串有效
使用这种显示转换的方法一般会出现的错误是:System.FormatException 输入字符串格式不正确的错误
这种转换字符串表示的值一定要在目标值类型的范围以内,超过就会出错误。
第三种:ToString()转换
语法:目标变量.ToString();
示例:int x=13;x.ToString();
注意:变量在没有明确赋值时,变量的值是不会改变的。
明确赋值有哪些---->例如:x++(明确赋值),x--(明确赋值),x+=2(明确赋值),x=13(明确赋值)
第四种:Convert.To目标类型 转换
Convert是一个类,它下面有很多转换的函数,也就是说这个类就是用于类型转换的。使用以To开头的函数进行类型转换
例如:
Convert.ToInt32(数据)<---转为32位的整数
Convert.ToInt64()\.ToInt16...
Convert.ToDouble().....
可以在编辑器中使用点运算符进行查看。
示例:字符串“12345”转为整数12345
Convert.ToInt32("12345");
注意:使用Convert.ToInt32时会发生四舍五入的情况
===============================================
注意:
类型转换特别是显示转换时,一般出现语法错误的情况比较少而出现语义错误的情况比较多,因此进行运算时如果参与运算的数据类型不一样结果要以精度大,范围大的为准。
以后可以通过类型的判断来防止出现上述的错误。
还可以通过限制外部的数据输入来进行控制防止出现错误。
基础语法
vs中的解决方案资源管理器作用:
管理项目和解决方案,
项目中可以管理的包括有:
1、项目文件
1.1 项目的属性
1.2 项目所在的路径
1.3 添加项目以及各种内容
1.4 设为启动项目
1.5 生成项目,重新生成项目
1.6 移除项目和重命名项目
2、项目属性的管理(程序集的管理)
3、引用的管理(*.dll,*.ocx...库的管理)
4、代码源文件(*.cs)
-----------------------------------
一个C#程序的基本结构:
1、导入命名空间
2、自定义命名空间
2.1 自定义类
2.1.1 函数(主函数和其他函数以及其他的对象)
所以一个C#的结构实际是两层结构:
第一层是导入需要的库
第二层是需要编写的内容
其中第二层是一种包含关系:
自定义命名空间包含自定义类
自定义类包含函数和其他对象
第二层的组织方式使用{}括号进行组织和区分相互的边界,
{}括号边界的特点:
由内可以访问到外部的对象(函数、变量、属性、其他的对象)
由外是不能访问内部的对象
--------------------------------------------
由内访问外部的路线:函数---》类---》空间
---------------------------------------------
每一条语句的结束都要用英文的分号表示
注释有三种:单行注释、多行注释、块注释
//--->这是单行注释
/*
---->这是多行注释
*/
///
/// --->这是块注释
///
------------------------------
标点符号在C#中都是以英文的为主,不能使用中文的标点符号,因为编译器无法识别中文的标点符号
----------------------------
C#中的括号有三种:小括号()、中括号[]、大括号{}
--------------------------
C#中的关键字:
https://wenku.baidu.com/view/6e5291fd814d2b160b4e767f5acfa1c7ab00824d.html
关键字一般以蓝色标识,是程序内部的语法成分,是由编译器使用的,一般不能将关键字作为变量、函数、类。。。
----------------------------
C#中的标识符
标识符是用来识别类、变量、函数或任何其它用户定义的项目。(通俗的说就是类名、变量名、函数名等)在 C# 中,类的命名必须遵循如下基本规则:
标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
标识符中的第一个字符不能是数字。
标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。
标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
不能与C#的类库名称相同。
来源:https://www.cnblogs.com/wodewei/p/11493238.html
==================================================
C#控制台的输入输出函数:
Console.WriteLine();//<-----输出小括号中的内容并换行
Console.Write();//<-----输入小括号中的内容不换行
------------
Console.ReadLine();//<----接收控制台键盘的输入并返回到程序中
Console.Read();//接收控制台键盘输入的第一个字符对应的ASCII编码值
Console.ReadKey();//获取用户按下的下一个字符或功能键,按下的键显示在控制台窗口中
===============================
数据类型:
最高类型是object
根据内存中存储位置可分为:值类型、引用类型
值类型:存储简单数据,高效率,低灵活
引用类型:存储复杂数据、低效率、高灵活
==========================
变量:
变量代表一块内存空间,变量名就是这块内存空间的临时名称。
变量是由数据类型、变量名、变量的值组成
变量必须先赋值后使用。
变量的使用分为:取值、赋值
变量可以重复使用,变量的作用范围主要是看声明在那个{}里面
================
常量:
对于变量来说是不变的量,
特点:一旦声明,必须赋值,一旦赋值,不能更改。
三种常量:
字符常量、符号常量、枚举
常量声明时必须加上const 作为标识后面和变量一样
程序调试
1、什么是调试?
程序调试是在程序中查找错误的过程,它用来检测程序是否能够正常运行,还能够查出潜在的问题。提升程序的健壮性,降低程序死掉的几率。程序调试是提升程序质量的一个保证手段。
2、程序错误有几种?
程序错误分为:语法错误和语义错误。
语法错误是VS编辑器通过编译就可以找出来,显示在错误窗口,如果你用鼠标双击错误信息则VS编辑器将直接跳到错误的代码行上。语法错误必须改正后才能通过编译,否则将不能通过编译。
编译一旦发现错误就会立刻停止并弹出错误提示,此时如果之前的代码通过了编译的那么就会提示是否运行上次的代码,如果你的观察不够很有可能点击是,那么就会运行上次成功的结果,这样就会让程序员产生错觉。
语法错误如果没有通过编译那么即使使用断点调试也不行的。必须首先排除错误的代码。
-----------------------------------------------------
语义错误其实就是没有正确给计算机指令从而导致程序运行并没有正确的结果,但是语法上并没有错误所以可以通过编译生成执行程序。通过各种调试方法找到错误并及时修改。
3、程序调试的主要步骤
3.1 设置断点(注意:断点的设置一般在变量之前的一句代码上,在流程控制的语句上)
3.2 启动调试(F5或F11、F10)F11---》逐语句运行、F10---》逐过程运行、F5---》全部运行直到断点停住
3.3 单步执行(找到问题所在的行数)PS:还可以使用单步运行达到理解程序是如何运行的学习目的
3.4 观察变量、发现问题
3.5 中断或停止调试 (为了修改代码)
3.6 修改代码
3.7 重新调试(发现新的问题)
---------------------------------------
运算符和表达式
1、C#中运算符有几种?
六种:
算术、自运算、关系、逻辑、条件、赋值
2、什么是表达式?
将操作数用运算符连接起来的称为表达式。
3、自运算符
符号在前,先运算后赋值(使用)。符号在后,先赋值(使用)后运算。
例如:
int i=0;
//单独使用,符号在前,在后是没什么区别
i++;
int j=i;//此时j的值是1
int k=i++;//此时k的值也是1,因为先赋值后运算
int l=++i;//此时l的值是3,因为先运算后赋值
4、赋值运算符
+= 相当于int i=0; i+=2;--->i=i+2;
可以使用小括号改变运算符的优先性
------------------------------------------------
浙公网安备 33010602011771号