C#之初体验
c#是一门高级编程语言,它的运行环境为**.NET**,该环境由Windows系统自带,C#的编辑工具为Visual Studio ,简称VS,该软件分不同版本,本人目前使用Visual Studio 2019版。接下来让我们进入C#的语言世界!
1、第一个C#程序
1.1 第一个C#程序的创建
1.1.1 新建程序
- 启动Visual Studio 2019
- 新建项目
- 生成可执行文件
- 开始运行
1.1.2 认识控制台应用程序文件夹的结构
解决方案和项目都是Visual Studio 提供的有效管理应用程序的容器,一个解决方案可以包含一个或多个项目,而每一个项目都能够解决一个独立的问题。注意:每一个项目都只能含有一个Main方法。
1.1.3 认识C#程序
- namespace:c#命名的空间,用于整理紧密相关的代码
- using:用于引用其他命名空间
- class:表示类
- Main():程序的入口,每一个项目都只能含有一个Main方法,有四种形式
static void Mian(string []args){}
static void Mian(){}
static int Mian(string []args){}
static int Mian(){}
1.2 C#中的变量和常量
1.2.1 C#中的数据类型
常用数据类型 | java | C# | 举例 |
---|---|---|---|
整型 | int | int | 年龄 |
浮点型 | float | float | 成绩 |
双精度型 | double | double | 圆周率 |
字符串型 | String | string | 姓名 |
布尔型 | boolean | bool | 是否是神 |
注意:
- C#中布尔类型的关键字与java不同,适用bool,C#中字符串型的关键字首字母是小字的。
- 在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。
1.2.2 C#中的变量
语法:数据类型 变量名称;
命名规则:
- 组成:52个英文字母(az,AZ),10个数字(0~9),下划线(_),除此之外不能含有其他的字符。
- 开头:只能以字母或下划线开头。
- 不能使用的:不能是C#中的关键字。
1.2.3 C#中的常量
常量是在程序运行过程中保持不变的值,定义语法如下
const 数据类型 常量名称 = 值;
例:
public const int day = 7;
1.3 Console类
1.3.1C#向控制台输出和从控制台读入
一.
Console.WriteLine();
Console.WriteLine(要输出的值);
Console.WriteLine("字符串格式",变量列表);
两种输出方式比较:
Console.WriteLIne(name+","+course+","+age);//加号连接
Console.WriteLIne("{0},{1},{2}",name,course,age);//格式字符串
不难看出格式字符串更简单,代码也容易维护。
二.
Console.ReadLine();
string name = Console.ReadLine();//接收
int num = int.Parse(Console.ReadLine());//强转,只能转换string
int num = Convert.TOInt32(Console.ReadLine());//强转,任意类型
1.4类和对象
语法:
[访问修饰符] 返回值 方法名 (参数列表)
{
//方法主体
}
访问修饰符:public,private(接下来会有相关介绍)
返回值 参数列表 方法名 方法主体:与java相同,不做多余介绍。
理解类和对象:
类就是创建对象的模板,对象是类的一个具体实力,这就是类和对象的关系。
c#中定义类的语法:
[访问修饰符] class 类名
{
//类的主体
}
类的成员包含 字段 属性 方法 (字段和属性的区别将在下文介绍)
1.5注释
多行注释:
1.文本注释:
///
///这是文本注释
///
2.块注释:
/* 这是块注释 */
单行注释:// 这是单行注释
2、C#语法快速热身
2.1选择结构:
if结构
C#中if结构的语法与java中的完全相同,我们可以迅速回顾
if基本结构
if(//条件)
{
//代码块
}
if-else结构
if(//条件)
{
//代码块
}
else
{
//代码块
}
多重if结构
if(//条件)
{
//代码块
}
else if(//条件)
{
//代码块
}
if嵌套结构
if(//条件)
{
if(//条件)
{
//代码块
}
else
{
//代码块
}
}
else
{
//代码块
}
switch结构(等值判断)
语法:
switch(表达式)
{
case 常量表达式1;
//代码块
break;//必须有
default:
//代码块
break;//必须有
}
c#与java最大的区别在于break的存在,若在case下有内容,则必须有,这就是C#的switch.
2.2循环结构
首先,循环不是无休止的进行的,满足一定条件的时候循环才会继续,称为“循环条件”,循环条件不满足时,退出循环;其次,循环结构时反复进行相同的或类似的一系列操作,称为“循环操作”。
用于打断循环结构执行顺序的两个关健字:
break:用于跳出循环,执行下一条程序。
continue:用于结束本次循环,进入下一次循环。
while循环
语法:
while(条件)
{
//代码块;
}
使用方法:
(1)声明并初识化循环变量。
(2)判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
(3)执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循。
do-while循环
do
{
//循环操作
}while(条件);
使用方法:
(1)声明并初识化循环变量
(2)执行一遍循环操作
(3)判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
for循环
在解决有固定的循环次数的问题时,首选for循环。
语法:
for(表达式1;表达式2;表达式3)
{
//循环操作
}
例:
for(int i = 0 ;i<100;i++){
//循环操作
}
使用方法:
(1)执行初始部分
(2)进行循环条件判。
(3)根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环,步骤4和步骤5均不执行。
(4)执行迭代部分,改变循环变量值。
(5)一次重复步骤(2)~(4),直至退出for循环。
foreach循环
foreach结构的执行过程是循环体依次取出数组中的每一个元素,然后对每一个元素都执行一次循环体操作。
语法:
foreach(foreach(元素类型 元素变量名 in 数组)
{
//代码块
}
注意:foreach结构不能改变数组中各元素的值;如果需要改变数组中元素的值,应该使用for循环。
2.3冒泡排序
冒泡排序算法
冒泡排序就像它的名称一样,冒泡排序是从底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换它的位置,否则保持原样,如此重复下去,直到所有的元素按从小到大的顺序排列。使用双重循环进行实现。
冒泡排序速记口诀(升序):
- N个数字来排队,两两相比小靠前。
- 外层循环i-1,内层循环j-1-I。
3. 使用属性升级MyBank
3.1 private访问修饰符
public与 private 区别:
如果将某个字段或者方法声明为public,就表示其他类可以访问这个字段或方法,如果声明为private,那么该字段或方法只能在本类中使用。
如果在成员定义之前没有指定修饰符,那么这个类成员的访问权限默认为internal.
访问修饰符 | 访问权限 |
---|---|
public | 不受任何限制 |
private | 只有类的内部可以使用 |
protected | 需要权限才能使用 |
3.2 this关键字
使用this关键字可以解决成员变量和局部变量名称的冲突问题。
this关键字代表的是当前的对象,在类的内部,可以用this关键字访问类的成员。
注意:this是当前类的引用,不能在静态成员中引用。
3.3 C#属性
用属性实现字段封装:
封装是将数据和操作方法保存在一起的技术,或者有选择的隐藏或公开类中的属性和方法。
private string name;
public string name
{
get{return name;} //只读
set{name=value;} //赋值(只写属性)
}
优点:
- 避免使用非法数据赋值
- 保证数据的完整性
- 避免类内部发生修改,导致整个程序修改。
3.4 值传递与引用传递
值传递:分为基本数据类型和引用数据类型:
- 基本数据类型:形参所作修改不会影响实参。
- 引用数据类型:形参如果修改具体的值会影响实参。(如果形参修改了指向的地址,那么接下来形参做的任何一项改变都不会影响实参)
引用传递:
- 在实参和形参前面多了一个关键字:ref
- 无论是形参还是实参所作修改都会受影响
- 传递都是地址
public void show()
{
....
int num1 ,num2;
swap(ref num1,ref num2);
}
public void Men(ref int num1,ref int num2) //ref关键字修饰的参数可以将被调用方法中参数的更新值传递给调用者
{
......
}
4. 深入C#的String类
4.1 常用的字符串处理方法
方法 | 说明 |
---|---|
Replace(String old, String newStr): | 替换 |
bool Equals(string value) | 比较一个字符串与另一个字符串value的值是否相等,若两者相等,返回true否则 返回false |
int IndexOf(string value) | 获取value所在的指定的位置 |
int lastIndexOf(string value) | 获取指定的字符串value在当前字符串中最后一个匹配的位置 |
string Substring(int index) | 从指定位置sta开始检索长度为length的字符串 |
string ToUpper() | 获得大写的形式 |
string ToLower() | 获得字符串的小写形式 |
string []Split(char separator) | 用指定的分隔符separator分割字符串,返回分割后字符串的数组 |
Concat() | 进行字符串的连接 |
string Trim() | 去掉字符串前后两端多余的空格 |
static IsNullOrEmpty(String) | 既可以判断空对象的字符串,又可以判断长度为0的字符串 |
Remove(int index,int length); | 从开始下标到length-1的内容都被删除 |
4.2 Format格式化
客户大多数都需要按照特定的格式在屏幕上输出程序数据,C#的string类提供的一个Format()方法对输出的字符串进行格式化,Format()方法允许把字符串,数字或布尔类型变量插到格式化字符中。
String myString =String.Format("格式化字符串",参数列表);
{索引 [,对齐] [: 格式字符串]}
例如:
String myString =String.Format("{0} 乘以 {1} 等于 {2}",2,3,2*3);
格式化数值结果表
字符 | 说明 | 示例 | 输出 |
---|---|---|---|
C | 货币形式 | String.Format("{0:C3}",2000) | ¥2000.00 |
D | 十进制形式 | String.Format("{0:D3}",2000) | 2000 |
F | 小数点后的位数固定 | String.Format("{0:F3}",2000) | 2000.000 |
N | 用逗号(,)隔开的数字 | String.Format("{0:N}",25000) | 250.000 |
P | 百分比计数字 | String.Format("{0:P3}",0.29768) | 29.768 |
X | 十六进制格式 | String.Format("{0:X000}",12) | C |
4.3 类型转换
1.简单的类型转换
-
隐式类型转换:int型可以隐式转换为float型或double型,float型可以隐式转换为double型。
常用于数值型之间,将取值范围小的数值类型转换为取值范围大的数值类型。
-
显示类型转换:等同于java中的强制转换。
常用于数值型之间,将取值范围大的数值类型转换为取值范围小的数值范围
2.数值类型与字符串之间的转换
- 整型:int.Perse(string);
- 单精度浮点型:float.Perse(string);
- 双精度浮点型:double.Perse(string);
3.使用Convert类进行转换
方法 | 说明 |
---|---|
Convert.ToInt32() | 转换为整型(int 型) |
Convert.ToSingle() | 转换为单精度浮点型(float型) |
Convert.ToDouble() | 转换为双精度浮点型(double型) |
Convert.ToString() | 转换为字符串类型(string型) |
Convert.ToInt64() | 转换为长整型(long 型) |
Parse()方法:将字符串转换为其他类型
Convert类:任何基本数据之间的相互转换。
后言
简单的C#体验结束啦,希望大家能有所收获!!!