目录
补充
创建一个简单的程序
如果项目名称为数字 自动添加_
一个解决方案下可以有一个项目 也可以有多个项目
继续上一篇的内容:
C#基本语法
一.注释
作用
①对所写的代码进行解释说明,增强可读性,方便自己和他人
②调试所写的代码,可以用于检查错误
1)单行注释://
添加注释:ctrl+k,ctrl+c
撤销注释:ctrl+k,ctrl+u
快捷方式:直接在类或者方法上敲三个斜杠,就会自动补全该注释的格式。
二.格式字符串
使用Write语句合WriteLine语句的常规形式中可以有一个或一个以上的参数
1.如果参数>1,参数见用逗号分隔
2.第一个参数必须总是字符串,称为格式字符串。格式字符串可以包含替代标记。
①替代标记在格式字符串中标出位置,在输出串中将用一个值来替代。
②替代标记由一个整数以及括住他的一对大括号组成,替代值从0开始编号
Console.WriteLine("two sample integers are {0} and {1}",3,6);
结果为
三.字符串插值
在C#6.0引入了字符串插值
在字符串前边加上了$符号
int var1 = 3;
int var2 = 4;
Console.WriteLine($"two sample integers are {var1} and {var2}");
输出结果为
四.变量
1.C#中的数据类型
数据类型 | 整数 | 小数 | 字符 | 字符串 | 金钱小数 |
表示为 | int | double | char | string | decimal |
例子 | 3、5、100 | 3.14、-8、5.0 | a’ 、’B’、‘b’ | “Zhangsan” 、”李四” | 5.6 |
2.声明变量
//变量的第一种声明方式
int number;//在内存中开辟一个名为number,类型为int类型的空间
number = 2000;//给这个number赋值2000
//简单操作
int number=2000
//变量的第二种声明方式
int num1,num2,num3;
num1 = 1000;
num2 = 1000;
num3 = 3000;
3.变量的命名规则
- 必须以“字母”、或 @ 符号开头,不要以数字开头
- 后面可以跟任意“字母”、“数字”、“下划线”
注意
你起得变量名 不要与 C# 系统中的关键字重复
在C#中,大小写是敏感的
同一个变量名不允许重复定义(先这么认为,不严谨)
- 定义变量时,变量名要有意义
- C#变量命名编码规范——Camel 命名法:
首个单词的首字母小写,其余单次的首字母大写
- Pascal 命名规范:每一个单词第一个字母都要大写(详细见下表)
- 如果使用到英文单词的缩写,全部用大写
命名方法 | 规则 | 用途 | 例子 |
Pascal 大小写 | 标识符中每个单词都首字母大写 | 用于类型名和成员名 | CarDeck ,DealersHead |
Camel 大小写 | 除第一个单词以外,标识符中所有的单词都首字母大写 | 用于本地变量和方法参数 | strName ,strChineseName |
C#进阶语法
1.分支语句
- if 语句
- if-else 语句
- switch 语句
2.循环语句
-
for循环
- for(int i = 0; i<10;i++ ){ }
-
while循环
- while(true){ }
-
do-while循环
- do{ }while(true)
3.数组
- 数组是一组相同类型的数据。数组中的数据需要通过数字索引来访问。
1)数组的声明
- 数组的声明需要使用new关键字。
- 在声明数组时,可以使用{}来初始化数组中的元素。
- 如果在数组声明之初没有使用大括号来初始化数组中的元素,则需要指定数组的大小。
- 在声明初始化有元素的数组时,也可以指定数组大小。
//声明没有元素的数组
int[] ints = new int[6]
//声明初始化有元素的数组
int[] ints = new int[]{1, 3, 4, 5}
//在声明初始化有元素的数组时,也可以指定数组大小
string[] strings = new int[5]{"H", “E", "L",“L","0"}
4.表达式
1)表达式的定义
- 什么是表达式
表达式是一种专门求值的语法实体 - C#对表达式的定义
由一个和多个操作数和零个或多个操作符组成的序列,获得多种返回值 - 算法逻辑的最基本(最小)的单元,表达一定的算法意图
- 因为操作符有优先级,所以表达式也有优先级
5.函数
1)值传递
在 C# 中,值传递是将参数传递给函数的默认方式,值传递的本质就是将实参的副本(将实参的值复制一份)传递给函数的形参。当调用函数时,将使用实参为每个形参赋值,并为每个形参创建一个新的存储位置,由于形参和实参指向不同的内存位置,所以无论是修改实参的值还是修改形参的值都不会对彼此造成影响。
class Demo {
static void Main(string[] args) {
int num = 11;
Console.WriteLine("调用函数之前:{0}", num);
Func(ref num);
Console.WriteLine("调用函数之后:{0}", num);
}
public static void Func(ref int val){
val += val;
Console.WriteLine("函数内部的值:{0}", val);
}
};
// 输出
// 调用函数之前:11
// 函数内部的值:22
// 调用函数之后:22
// 通过运行结果可以看出,当函数内部值发生更改时,因为他们共用一个内存地址所以调用函数后值发出了改变
2)引用传递
引用传递是对变量内存位置的引用。与值传递不同,使用引用传递的形式传递参数时,并不会为形参创建新的内存地址,而是与实参共同指向相同的内存地址。正因为如此,当修改形参的值时,实参的值也会被修改。
在 C# 中,需要使用 ref 关键字来使用引用传递:
class Demo {
static void Main(string[] args) {
int num = 11;
Console.WriteLine("调用函数之前:{0}", num);
Func(out num);
Console.WriteLine("调用函数之后:{0}", num);
}
public static void Func(out int val){
val = 22;
}
};
// 输出
// 调用函数之前:11
// 调用函数之后:22
// 通过运行结果可以看出,在函数体内直接更改了nun的值
3)输出传递
使用 return 语句可以从函数中返回一个值,但是使用输出传递则可以从函数中一次性返回多个值。输出传递与引用传递相似,不同之处在于输出传递是将数据从函数中传输出来而不是传输到函数中。
在 C# 中,需要使用 out 关键字来使用输出传递
class Demo {
static void Main(string[] args) {
int num = 11;
Console.WriteLine("调用函数之前:{0}", num);
Func(out num);
Console.WriteLine("调用函数之后:{0}", num);
}
public static void Func(out int val){
val = 22;
}
};
// 输出
// 调用函数之前:11
// 调用函数之后:22
// 通过运行结果可以看出,在函数体内直接更改了nun的值
out和ref的区别
out修饰的参数必须在方法内修改,而ref可以修改也可以不修改,out在传入参数的时候,参数是局部变量的话,可以不用赋值,因为out一定会对其进行赋值,而ref修饰的参数,在实参必须有初始值才能调用。因为ref修饰的不一定会给它赋值