一、第一个C#语言
1、 C#程序和.net
1.1、C#程序是什么?
C#程序:是C#语言编写程序的工具
1.2、 .net是什么?
.net:C#运行的环境
2、认识C#程序中的一些关键字
2.1、namespace关键字
namespace:命名空间,是C#中组织代码的方式
作用:类似于Java中的package(包)。
2.2、using关键字
using:用来引用命名空间。
类似于Java中的import关键字
2.3、class关键字
class用来定义类,C#中不要求类名必须与源文件的名称一样。
2.4、Main( )方法
1.Main方法的四种语法:
static void Main(string [] srgs)
static void Mian()
static int Main(string [] srgs)
static int Mian()
3、C#中的数据类型
数据类型 | 含义 |
---|---|
int | 整型 |
float | 单精度浮点 |
double | 双精度浮点 |
string | 字符串 |
bool | 布尔 |
类 | |
array | 数组 |
4、C#中的变量
4.1、变量的声明与赋值
语法:
数据类型 变量名 = 值;
例:
int a = 12;
//声明了一个为a的整型变量,并给它赋初始值为12;
4.2、变量 的命名规则
1、只能是字母、数字和下划线组成。
2、不能以数字开头。
3、不能使用C#语言的关键字。
4、使用驼峰命名法。
4.3、C#中的常量
1、 语法:
const 数据类型常量名称 = 值;
2、常量的命名规范
(1)常量名称必须具有一定的实际意义 。
(2)常量名称最好以大写字母来命名,中间可根据意义的连接性用下划线做连接,每个常量定义的右侧最好有简单的注释,说明起作用。
(3)常量名称长度最好不要超过25个字符,否则可读性差。
5、C#中的输入输出
5.1、C#输出的三种方式
(1)Console.WriteLine();
(2)Console.WriteLine(“要输出的值”);
(3)Console.WriteLine(“格式字符串”,变量列表);
5.2、C#的输入
语法:Console.ReadLine();
6、类和对象
6.1自定义方法
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
//方法的主体
}
1.访问修饰符的分类
pubic:公共的
private:私有的
projected:受保护的
internal:默认的
2.方法的返回值类型
可以是int、float、double、bool、string等。如果方法不返回值,需要使用void关键字。
3.方法名
每个定义的方法都要有一个名称。
4. 参数列表
调用有参方法是,可以向方法中传递参数。
5.方法的主体
方法实现某一特定功能的代码。
6.2、理解类和对象
1、定义类的语法:
[访问修饰符] class 类名
{
//类的主体
}
6.3、注释
1.分类
C#中的注释分为:单行注释、多行注释和折叠注释。
//:单行注释
多行注释:文档注释:/// 和 块注释:/**/
折叠注释:#region
#endregion
6.4、调试
1.调试所用的快捷键
F5:开始调试
Shift+F5:停止调试
F9:设置或取消断点
Ctrl+F9:取消断点
F10:单步执行
F2:转到所调用过程或变量的定义。
Ctril+F2:将焦点转移到类的下拉列表。
二、C#语法快速热身
1、C#中的结构分类
(1)、顺序结构
(2)、选择结构
(3)、循环结构
2、顺序结构
执行按照从上到下的顺序执行。
3、选择结构
3.1、分类
(1)、if选择结构
(2)、switch结构
3.2、语法
1、if结构:
if后面括号中的条件会产生一个bool值,为true或false。
(1)、简单if语法结构:
当if里面条件成立时,就执行里面的代码块。否则就执行if大括号后面的。
if(条件){
//代码块
}
(2)、if-else语法结构:
if(条件){
//代码块1
}else{
//代码块2
}
如果if括号里的条件成立,就执行代码块1,如果不成立就执行代码块2。
(3)、多重if选择结构:
if(条件1){
//代码块1
}else if(条件2){
//代码块2
}else{
//代码块3
}
先判断条件1,为true就执行代码块1,不成立就判断条件2,为ture就执行代码块2,如果都不成立,就执行代3。
(4)、嵌套if选择结构:
if(条件1){
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
}
里面的if条件判断是基于外面的if条件上的,如果外面的条件为false,里面的就不会判断。else永远是与离自己最近的并没有被配对的if进行配对。
逻辑运算符:当同时有多个条件的时候就需要用逻辑运算符。
运算符 | 含义 | 作用 |
---|---|---|
&& | 逻辑与 | 多个条件同时满足 |
|| | 逻辑或 | 多个条件只需要满足一个 |
! | 逻辑非 | 取所得值的相反值 |
三目运算符语法结构:
数据类型 变量名 = 条件?true:false
与if-else选择结构一样。
2、switch选择结构
1.switch 语法结构如下:
switch(表达式){
case 常量1:
//代码块1;
break;
case 常量2:
//代码块2;
break;
......
default:
//代码块n;
break;
}
4.default:当所有case都不满足的时候,就会进入default,default表示默认,可以省略。
5.break:表示停止,用来跳出当前结构,不可以省略。
4、数组
1.、一维数组
语法:
数据类型 [ ] 数组名;
2、对象数组
语法:
类名 [ ] 数组名 = new 类名[长度];
5、循环结构
1.while循环
语法:
while(条件){
//代码块
}
例如:
class Do{
static void main(String[] args){
int i = 0;
while(i<=100){
Sysotem.out.println("好好学习!");
i= i+1;
}
}
}
//好好学习会执行100次
1.执行顺序如下:
(1)声明并初始化循环变量。
(2)判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
(3)执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。
2.while循环的特点:
先判断条件,后执行代码块。所以可能会一次也不执行。
2、do-while循环
语法:
do{
//代码块
}while(条件);
例如:
class Do{
static void main(String[] args)
int i=1;
do{
System.out.println("好好学习!");
i++;
}while(i<=100);
}
}
1.执行顺序:
(1) 声明并初始化循环变量
(2)执行一遍循环操作
(3)判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
2.特点:
先执行,再判断,在do-while中,循环体至少执行一遍。
3.for循环
语法:
for(初始化部分;条件部分;迭代部分){
//代码块
}
例如:
class Do{
public static void main(String[] args){
for(int i = 0;i<100;i++){
System.out.println("好好学习,天天向上!");
}
2.执行顺序:
(1)执行初始部分(如:int i = 0)。
(2)进行循环条件判断 (如:i<100)。
(3)根据循环条件判断结果。为true,则执行循环体;为false,则退出循环体。
(4)执行迭代部分,改变循环变量值(i++)。
4.foreach循环
语法:
foreach(数据类型 变量名 in 数组名)
{
//代码块
}
5.二重循环
语法:
for(初始化;循环条件;迭代部分)
{
for(初始化;循环条件;迭代部分)
{
//代码块
}
}
例如:
static void Main(string[] args)
{
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
{
Console.Write(j);
}
Console.WriteLine();
}
Console.ReadLine();
}
6、循环的跳转语句
1.循环条件结束
当循环的条件不成立的时候,就会结束循环。
2.强制结束
(1)break:用来结束整个循环
当循环执行到某一次循环是,不想再让它继续执行下去的时候,可以使用break。
或者当循环条件永远为true的时候,就必须用break来结束循环,不然就会变成死循环。
(2)continue:只能用来结束本次循环
当你有一次循环不需要执行的时候,就可以使用continue跳过。
continue后面的语句不会执行,回到循环的下一次开始。
3.break和continue的用法
break:可以在循环中使用,也可以在选择结构中使用。
continue:只能用于循环结构。
7.冒泡排序
1、算法:
两两相邻进行比较,可以先求出最大值或最小值。
例如:
static void Main(string[] args)
{
int [] scores = new int[5];
int i,j;
int temp;
Console.WriteLine("请输入5个学员的成绩:");
for(i = 0;i<scores.Length;i++)
{
scores[i] = int.Parse(Console.ReadLine());
}
//冒泡排序的双重循环
for(i=0;i<scores.Length;i++)//用来控制次数
{
for(j = 0;j<scores.Length-1-i;j++)//用来控制循环的比较情况
{
if(scores[j]>scores[j]+1)
{
temp = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp;
}
}
}
}
三、使用属性升级MyBank
1、this关键字
含义:this是指当前对象本身,可以引用当前类的属性和方法
2、C#属性
2.1用方法保护数据安全
将控制台输入的东西作为这个方法的参数传递到方法中,在方法中使用if结构进行判断。
2.2用属性实现字段封装
1.C#的属性
语法:
private string _name;
public string Name;
{
get{return _name;}
set{_name = value;}
}
get:访问器用来返回相应的私有字段的值。
set:访问器用来设定相应的私有字段的值。
2.属性的数据类型
必须与它所访问的字段类型一致。
3.属性的访问类型
只读属性:只包含get访问器
只写属性:只包含set访问器
读写属性:包含get和set访问器
4.对象初始化器
语法:
Student stu = new Student(){Name = " ",Age = " "};
23.封装
1、封装是面向对象的三大特性之一,它用于隐藏内部实现,对外只暴露对类的基本操作,而不会让其他对象影响类的内部实现。
2、特点:
1、避免使用非法数据赋值
2、保证数据的完整性
3、避免类内部发生修改时,导致整个程序的修改。
3、值传递和引用传递
1.值传递
当传递的是基本数据类型:形参的改变不会影响实参。
当传递的是引用数据类型:改变的是具体的值的时候形参会影响实参的值。
2.地址传递(引用传递)
使用ref关键字进行传递,实参和形参都需要加ref关键字。
四、深入C#的String类
1.常用的字符串处理方法
方法 | 含义 |
---|---|
bool Equals(string value) | 比较字符串之间是否相等 |
int Compare(string strA, string strB) | 比较字符串的大小 |
int IndexOf(string value) | 查找字符,从前开始找 |
int LastIndexOf(string value) | 查找字符,从前开始找 |
string Join(string separator,string[ ] value) | 将数组中的每个字符串用分隔符连接 |
string[ ] Split(char separator) | 分割字符串 |
string Substring(int startIndex,int length) | 截取字符串 |
string ToLower() | 转换为小写 |
string ToUpper() | 转换为大写 |
string Trim() | 去掉前后两端的空格 |
Replace(string,string) | 讲究字符串替换为新字符串 |
2.Format格式化
1、语法:
String myString = String.Format(“格式字符串”,参数列表);
{索引[,对齐] [ :格式字符串]}
2、特殊字符
字符 | 说明 |
---|---|
C | 货币格式 |
D | 十进制格式 |
F | 小数点后的位数固定 |
N | 用逗号(,)个开的数字 |
P | 百分比计数法 |
X | 十六进制格式 |
3.类型转换
1、简单的类型转换
(1)、隐式类型转换
将同一类型的小的数据类型转换为大的数据类型。
例如:double = float;
(2)、显式类型转换
将 ;两种数据类型进行强转。
Convert.To数据类型
(3)、字符串转换为数值型
只能将数字型的字符串转换为数据型
语法:
int.Parse(Console.ReadLine());
2.使用Convert类进行转换
方法 | 说明 |
---|---|
Convert.ToInt32() | 转换为整型 |
Convert.ToSingle() | 转换为单精度浮点型 |
Convert.ToDouble() | 转换为双精度浮点型 |
Convert.ToString() | 转换为字符串类型 |