初识C#
一、认识C#
一、.NET与C#
.NET是基于Windows平台的一种技术,是C#的运行环境,.NET是属于微软公司所有。
C#是一种编程语言,是由微软公司开发的一门语言,在Windows系统中是不需要配置C#的运行环境的,因为.NET和C#都是属于微软公司,所以Windows系统中会自带.NET运行环境。
C#只能在Windows系统中使用,因为C#不支持其他的系统。
C#使用的工具是:Visual Studio 2019
1、新建程序
新建程序的步骤:
启动Visual Studio 2019 ------> 新建项目 ------> 生成可执行文件 ------> 运行
2、认识C#程序
1、关键字
I、namespace 关键字:namespace是C#的命名空间,也是C#中组织代码的方式,作用类似于Java中的package(包)。
II、using关键字:作用类型Java中的import(导包的关键字),在C#中使用using来引用其他命名空间。
III、class关键字:在C#中class关键字表示类,C#和Java一样是面向对象的一种语言,在Java中class关键字也表示类。
IV、Main()方法:在C#中的Main()方法和Java中的main()方法的作用是一样的,是程序运行的入口,应用程序从这里开始运行。在C#中的Main()方法有四种形式。
语法:
static void Main(string[] args){}
static void Main(){}
static int Main(string[] args){}
static int Main(){}
二、C#的变量和常量
1、C#中的数据类型
C#中的数据类型分为两种:基本数据类型和引用型数据类型,
基本数据类型有:int(整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、bool(布尔)、char(字符型)、short(短整型)、byte(位)
引用型数据类型有:string(字符串型)、array(数组)、class(类)、集合
其实C#和Java中的数据类型基本一致,当是C#中的布尔类型的关键字和Java中的不同,使用bool。
注:C#中字符串的关键字首字母是小写的,在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。
2、C#中的变量
C#中的变量声明方式与Java是相同的。
变量声明语法:
//语法: 数据类型 变量名称;
//例:
int num;
变量命名规则:
1、组成:52个英文字母(AZ,az)、10个数字(1~9)、下划线(_),除了这些之外不能含有其他的字符;
2、开头:只能以下划线和英文字母开头;
3、不能使用的:不能使用C#中的关键字;
4、变量的名称要有意义,尽量用对应的英文命名,具有见名知意的作用;
5、避免使用单个字符作为变量名;
6、使用驼峰命名法。
3、C#中的常量
1、什么是常量
常量就是在程序运行过程中保持不变的值。
2常量的语法
//语法:const 数据类型 常量名 = 值;
//例:
const int num = 10;
3、常量命名规则
1、常量名称必须具有一定的实际意义;
2、常量名最好是以 大写字来命名,中间可根据意义的连接性用下划线做连接;
3、常量名称长度最好不要超过25个字符;
三、C#的Console类
Console是C#中的控制台类,利用它可以方便地进行控制台的输入/输出。
1、C#向控制台输出
常用的输出方法有两个:Console.Write()和Console.WriteLine()
两者的区别在有输出后有无换行,Console.Write()在输出后是没有换行的,Console.WriteLine()在输出后是有换行的。
1、向控制台输出的语法:
//语法: 方法一:
Console.WriteLine(); //输出一行没有任何内容的空行
//方法二:
Console.WriteLine("要输出的值");
//输出括号里的值,括号里的值如果是变量就不需要加双引号(""),如果是文本就要加双引号
//方法三:
Console.WriteLine("格式字符串",变量列表);
//这是C#中的新语法,先举个例子:
string couruse = "C#";
Console.WriteLine("我的课程名称是:{0}",couruse);
//在这里{}里面的值,我们称之为占位符,占位符从0开始。
2、C#向控制台输入
在Java中不仅能够向控制台输出,还可以向控制台输入;那么C#也一样可以向控制台输出和输入,上面讲了向控制台输出,接着就来说一下向控制台输入吧。
与Console.WriteLine()对应,从控制台输入可以使用Console.ReadLine()方法,
1、输入的语法
//语法
Console.ReadLine();
//这里返回的是一个字符串
Console.ReadLine();这里返回的是一个字符串类型的值,所以要用一个字符串变量去接收它的值
那如果我们要使用整型数据怎么办呢?别担心,一个简单的转化就可以了。
2、强制转换
强制转换有两个方法,在后面的字符串中我们还会学习到其他的强制转换;
强制转换语法:
//语法: 方法一 :数据类型.Parse(string类型);
int age = int.Parse(Console.ReadLine());
//向控制台接收一个string类型的值强转为int类型的,这里Console.ReadLine是string类型的
//方法二:Convert.To数据类型(任意数据类型);
string num = "20";
int number = Convert.ToInt(num);
//这里是将string类型的值强制转换成int类型的值
四、类和对象
在C#中的类和对象跟Java中的类和对象差不多,但是C#中的多了一个字段
1、自定义方法
在C#中定义方法和Java中的类似
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
//方法的整体
}
1、访问修饰符:在C#中我们目前学到了两个访问修饰符,一个是public(公有的),另一个是private(私有的)在这里用中括号[]括起来的表示可有可无。
2、方法命名规范
I、方法名要有实际的含义
II、方法名一般使用Pascal命名法
2、理解类和对象
在C#中,定义类的语法如下:
[访问修饰符] class 类名
{
//类的主体
}
在类中可以包含字段、属性和方法,每个类可以使用访问修饰符来设置该类的访问权限。
3、注释
在C#中有四种注解:分别是单行注释:// 、文档注释:/// 、块注释:/* */ 、折叠注释:以#region 开头 ,以#endregion结尾
二、C#的语法快速热身
一、C#的选择结构
C#中的选择结构和Java中的选择结构其实是差不多的;
C#中的选择结构分为if结构和switch结构;
1、if结构
在C#中if结构和Java中if结构没有什么太大的差距。
C#中if结构也分为四种结构:简单if结构、if…else结构、多重if结构、if嵌套结构;语法和Java中的语法一致,请参照Java中if选择结构语法。
语法:
//简单if结构语法
if(条件表达式)
{
//代码块
}
//if...else结构语法
if(条件表达式)
{
//代码块1
}
else
{
//代码块2
}
//多重if结构
if(条件表达式1)
{
//代码块1
}
else if(条件表达式2)
{
//代码块2
}
else
{
//代码块3
}
//if嵌套
if(条件表达式1)
{
if(条件表达式2)
{
//代码块1
}
else
{
//代码块2
}
}
else
{
//代码块3
}
2、switch结构
在C#中switch选择结构和Java的也是基本一样,但是C#和Java中还是有区别;
在C#中switch语法:
//表达方式一:
switch(表达式 )
{
case 常量表达式 1:
//语句1
break; //必须有
case 常量表达式 2:
//语句2
break; //必须有
......
defaull:
//语句n;
break; //必须有
}
//表达式二:
switch(表达式 )
{
case 常量表达式 1:
case 常量表达式 2:
//语句1
break; //必须有
......
defaull:
//语句n;
break; //必须有
}
在C#中的switch结构中的break是必须有的,但是如果case后面没有语句的话就不需要break。
二、C#的数组与循环结构
1、一维数组
1、声明数组
在Java中声明数组的两种方式:
Java中的数组语法
//方式一
数据类型[] 数组名;
//方式二
数据类型 数组名[];
但是在C#中只有一种声明方式
C#中的数组声明语法
数据类型[] 数组名;
2、获取数组长度
语法:
数据名.Length
3、访问数组元素
语法:
数组名[下标]
2、对象数组
在C#中的对象数组和Java中的对象数组基本是一样的,没有什么太大的差别。
3、循环结构
在C#中循环和Java中的循环是一样的,但是在C#中的foreach循环结构和Java中的不太一样;
在Java中的foreach循环的语法是
for(数据类型 变量名 : 数组名){}
在C#中的foreach循环的语法是
foreach(数据类型 变量名 in 数组名){}
对比Java和C#中foreach循环,Java中的foreach在使用的时候名称是for,中间用冒号( :)分割开来,C#中的foreach循环在使用时的名称是foreach,中间用in分开。但是它们的使用效果是一样的。
C#中的while、do… while、for的语法
//while的语法
while(条件表达式)
{
//循环代码块
}
//do...while循环的语法
do
{
//循环代码块
}while(条件表达式);
//for循环的语法
for(初始化;循环条件;迭代)
{
//循环代码块
}
//例
for(int i = 0; i<5; i++)
{
Console.WriteLine(i); //循环输出i的值
}
三、C#的冒泡排序
1、冒泡排序算法
冒泡排序是用来排序的一种算法,用来排序的算法其实有很多,像快速排序算法、选择排序算法…其中冒泡排序是一个经典的算法。
冒泡排序算法是两两相邻比较;不满足条件就进行交换。
冒泡排序通常结合双重循环来使用:
int[] array = {16,15,80,40,13,25};
int temp; //临时变量
//开始排序---使用冒泡排序进行升序排序
for(int i = 0;i<array.Length-1;i++)
{
for(int j = 0; j < array.Length-1-i; j++)
{
if(array[j] > array[j+1]) //在这里大于符号(>)表示升序,小于符号(<)表示降序
{
//交换元素
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
注:外层循环要数组长度-1.内层循环要数组长度-1-i;
三、C#的属性
一、访问修饰符和this关键词
1、访问修饰符
在前面提到了一下两个访问修饰符:public(公有的)和 private(私有的);
在C#中的访问修饰符我们用一个表格来看一下它们的区别
访问修饰符 | 访问权限 | 访问级别 |
---|---|---|
public | 不受任何限制 | 最高 |
private | 只有类的内部可以使用 | 最低 |
通过表我们可以知道public和private的区别在哪。
private的使用范围在能在当前类里面使用它,不能在其他类里面使用它,也不调用它,否则就会报错。
2、this关键字
this关键字是指当前对象本身。通过this可以引用当前类的成员变量和方法,但是this不能在静态(static)成员中使用;
二、C#的属性
1、用属性实现字段封装
相对调用方法设置或获得类的私有字段值来说,微软提出了更加优化的解决方案—属性,使用 get 和 set 访问器可以轻松地完成字段的赋值和读取。
get和set的语法:
private string _name;
public string Name
{
get{ return _name; }
set{ _name = value; }
}
在这里get表示返回值,也是只读形式;set表示赋值,也是只写形式;如果要在封装里表示读写模式,就要get和set一起使用,只读就只用get方法,只写就只用set方法;
2、封装
封装表示将东西打包,使其以新的完整的形式出现。
三、值传递和引用传递
参数传递有几种,分别实现什么样的效果
1、值传递
值传递分为基本数据传递和引用型数据传递
基本数据类型传递:形参所做修改不会影响实参
引用型数据类型传递:形参修改堆里面具体值的时候回影响实参
2、地址传递
地址传递也分为基本数据类型传递和引用型数据类型传递,但是地址传递无论是基本数据类型还是引用型数据类型,都会改变的实参。
形参所做修改一定会影响实参
实现方式:在形参和实参前面加ref
四、深入C#的String类
一、C#中的String类
1、常用字符串方法
常用字符串方法表
方法 | 说明 |
---|---|
bool Equals (string value) | 比较一个字符串与另一个字符串value的值是否相等,返回值为bool(布尔)值 |
int Compare(string strA,string strB) | 比较两个字符串的大小关系,返回一个整数 |
int IndexOf(string value) | 获取指定的value字符串在当前字符串中的第一个匹配项的位置 |
int LastIndexOf(string value) | 获取指定的value字符串在当前字符串中的最后一个匹配项的位置 |
string Join(string separator,string[] value) | 把字符串数组value中的每个字符串用来指定的分隔符separator连接,返回连接后的字符串 |
string[]Split(char separator) | 用指定的分隔符separator分割字符串,返回分割后的字符串数组 |
string Substring(int startIndex,int length) | 从指定的 位置startIndex开始检索长度为length的子字符串 |
string ToLower() | 获得字符串的小写形式 |
string ToUpper() | 获得字符串的大写形式 |
string Trim() | 去掉字符串前后两端多余的空格 |
2、运算符和方法的区别
I、运算符“==”和Equals()方法
运算符“==”和Equals()方法应用于两个字符串,所判断的内容是有差别的。
“==”判断的是两个字符串对象在内存中的首地址,即判断是否是同一个字符串对象。
Equals()方法判断的是两个字符串对象的值是否相等。
II、“”和String.Empty
“”:为String对象分配一个长度为零的存储空间。
String.Empty:表示空字符串,不会为对象分配存储空间。
3、连接分割字符串
在C#中的字符串中的连接和分割有专门的方法;连接是Join()方法,分割是Split()方法;
string inputString = "My dream is to become an excellent programmer." //一个固定的字符串
string[] splitString; //分割后的字符串数组
string joinString; //连接后的新字符串
//以空格作为分割符分割字符串
splitString = inputString.Split(' ');
//将分割后的字符串使用下划线连接在一起
joinString = string.Join(" ",splitString);
//输出分割后的字符串
Console.WriteLine("分割后的字符串为:");
foreach(string str in splitString)
{
Console.WriteLine(str);
}
//输出连接后的字符串
Console.WriteLine("连接后的新字符串为{0}",splitString);
运行结果为:
4、Format格式化
在C#中的String类提供了一个Format()方法对输出的字符串进行格式化;Format()方法允许把字符串、数字或者是布尔类型的变量插入到格式字符串当中。、
语法:
string myString = String.Format("格式字符串",参数列表);
//其中,格式字符串中包含固定文本和格式项,语法如下:
{索引[,对齐][:格式字符串]} //在这里[]中的内容可有可无
格式化数值结果表
字符 | 说明 | 实例 | 输出结果 |
---|---|---|---|
C | 货币格式 | String.Format("{0:C3}",2000) | ¥2 000.000 |
D | 十进制格式 | String.Format("{0:D3}",2000) | 2000 |
F | 小数点后面的位数固定 | String.Format("{0:F3}",2000) | 2000.000 |
N | 用逗号(,)隔开的数字 | String.Format("{0:N}",250000) | 250,000 |
P | 百分比计数法 | String.Format("{0:P3}",0.29768) | 29.768 |
X | 十六进制格式 | String.Format("{0:X000}",12) | C |
二、类型转化
1、简单的类型转换
在C#中的类型转换分为两种:隐式类型转换和显示类型转换
I、隐式类型转换:简单的来说就是小的数据类型转换成大的数据类型;例如int类型转换成float类型或double类型,float类型转换成double类型的,这种就称为隐式类型转换,这种会自动转换。
II、显示类型转换:显示类型转换和隐式类型转换是刚好相反的,显示类型转换就是将大的数据类型转换成小的数据类型;例如将double类型转换成int类型的,这种就要强制转换,例如
double num = 5.2;
int number = 2;
int sum = (int)num + number;
2、数值类型与字符串之间的转换
1、字符串转换为数值型
int.Parse(Console.ReadLine()); //从控制台接收整数
int.Parse(string); //将字符串转换成整型
float.Parse(string); //将字符串转换成单精度浮点型
double.Parse(string); //将字符串转换成双精度浮点型
2、数值型转换为字符串
int age = 18;
string myage = age.ToString();
3、使用Console类进行转换
常用使用Console类进行转换方法表
方法 | 说明 |
---|---|
Console.ToInt32() | 转换为整型(int) |
Console.ToSingle() | 转换成单精度浮点型(float) |
Console.ToDouble() | 转换成双精度浮点型(double) |
Console.ToSting() | 转换成字符串类型(String) |
;
int sum = (int)num + number;
#### 2、数值类型与字符串之间的转换
1、字符串转换为数值型
```C#
int.Parse(Console.ReadLine()); //从控制台接收整数
int.Parse(string); //将字符串转换成整型
float.Parse(string); //将字符串转换成单精度浮点型
double.Parse(string); //将字符串转换成双精度浮点型
2、数值型转换为字符串
int age = 18;
string myage = age.ToString();
3、使用Console类进行转换
常用使用Console类进行转换方法表
方法 | 说明 |
---|---|
Console.ToInt32() | 转换为整型(int) |
Console.ToSingle() | 转换成单精度浮点型(float) |
Console.ToDouble() | 转换成双精度浮点型(double) |
Console.ToSting() | 转换成字符串类型(String) |