第一个C#程序
一、第一个C#程序的创建
1、新建程序
1、启动Visual Studio 2012
第一次运行Visual Studio 要配置环境,需要花费一定的时间。
2、新建项目
文件 > 新建 > 项目 新建项目
3、生成可执行文件
4、开始运行
调试 > 开始运行 (不调试)
5、F5:启动
6、Ctrl+F5 :开始执行不调试。
2、认识控制台应用程序文件夹的结构
program.cs :该文件是项目的启动文件,在该文件中定义项目的启动入口,即Main()方法。在C#中,程序源文件以.cs作为扩展为。
Hello Word. exe :这个文件位于bin\Debug目录下,是项目编译后生成的可执行文件,可以总结运行。
3、认识C#程序
1、namespace关键词
(命名空间)
2、using关键词
在Java中,如果导入其他包,应该使用import关键词。而在C#中,使用using关键词来引用其他命名空间,它的作用和Java中的import类似。
3、class关键词
是一种面向对象的语言,使用class关键词表示类
4、Mian()方法
跟Java中的main()方法作用是一样的,我程序运行入口,应用程序从这里开始运行。
语法:
static void Main(string[] args){}
static void Mian(){}
static int Main(string[] args){}
static int Main(){}
5、关键代码
Main()方法中添加的两行代码就是这个小程序的关键代码,是用来输出和输入的。
Console.WriteLine("Hello word");
Console.ReadLine();
组织代码的方式:C#使用命名空间(namespace),Java使用包(package)。
引入命名空间或包的关键词:C#使用using ,Java使用import。
程序入口:C#的Main()有四种形式,Java的Main()有一种形式。
二、C#的变量和常量
1、C#中的数据类型
常用数据类型 | java | C# | 举 例 |
---|---|---|---|
整型 | int | int | 年龄 |
浮点型 | float | float | 成绩 |
双精度型 | double | double | 圆周率 |
字符串型 | String | string | 姓名 |
布尔型 | boolean | bool | 是否是少数民族 |
C#中布尔型的关键字与Java不同,使用bool,C#中字符串型的关键字首字母是小写的。
在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。
2、C#中的变量
语法:
数据类型 变量名称;
C#的变量命名规则与Java也基本相同,只是"$"符号在C#中是不能使用的。
3、C#中的常量
1、什么是常量
常量就是在程序运行过程中保持不变的值,
语法:
const 数据类型 常量名称 = 值;
2、常量命名规范:
常量名称必须具有一定的实际意义。
常量名称最好以大写字母来命名,中间可根据意义的链接性用下划线做连接,每个常量定义的右侧最好有简单的注释,说明其作用。
常量名称长度最好不要超过25个字符,否则可读性差。
三、Console类
1、C#向控制台输出
语法:
方法一:
Console.WriteLine();
方法二:
Console.WriteLine(要输出的值);
方法三:
Console.WriteLine("格式字符串",变量列表);
2、C#从控制台读入
与Console. WriteLine()对应,从控制台输入可以使用Console.WriteLine()方法。
Write是写的意思
Read是读的意思
语法:
Console.ReadLine();
这句话返回一个字符串,可以直接把它赋给一个字符串变量。
四、类和对象
1、自定义方法
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
//方法的主体
}
1、访问修饰符
2、方法的返回值类型
3、方法名
4、参数列表
5、方法的主体
2、理解类和对象
语法:
[访问修饰符] class 类名
{
//类的主体
}
3、注释
C#的行注释和块注释与Java是完全相同的,分别使用//和/…/但文档注释与Java中的注释略有不同,C#中使用 “///” ,且文档注释的每一行都以 "///"开头 。
4、Visual Studio调试技巧
1、设置断点(断点:braekpoint)
程序调试时常用的快捷键如下
F5:开始调试
Shift+F5:停止调试。
F9:设置或取消断点
Ctrl+F9:取消断点
F10:单步执行
F2:转到所调用过程或变量的定义
Ctrl+F2:将焦点转移到类的下拉列表框
2、监视变量值
按F5键开始执行程序调试后,在代码编译器窗口下方可以看到一个监视(watch)窗口。
C#语法快速热身
一、选择结构
1、if结构
语法:
if(条件表达式)
{
//代码块
}
语法:
if(条件表达式)
{
//代码块
}
else
{
//代码块
}
语法:
if(条件表达式1)
{
//代码块1
}
else if(条件表达式2)
{
//代码块2
}
else if(条件表达式4)
{
//代码块3
}
else
{
//代码块4
}
语法:
if(条件表达式)
{
if(条件表达式)
{
//代码块1
}
else
{
//代码块2
}
}
else
{
//代码块3
}
2、switch结构
Java的语法:
switch(表达式)
{
case 常量表达式1:
//语句1;
break; //可以没有
case 常量表达式2:
break; //可以没有
defailt:
//语句n;
}
C#的语法:
switch(表达式)
{
case 常量表达式1 :
//语句1;
break; //必须要
case 常量表达式2 :
//语句2;
break; //必须要
.....
default:
//语句n
break; //必须要
}
switch(表达式)
{
case 常量表达式1:
case 常量表达式2:
//语句1
break; //必须要
.....
default:
//语句n
break; //必须要
}
二、数组与循环
1、一维数组
语法:
数据类型[] 数组名;
数据类型 数组名[];
但是,在c#中只能使用第一次方式,即不能把方括号放在数组名的后面
语法:
数据类型[] 数组名;
语法:
数组名.Length
同Java一样,访问数组的元素使用的形式,下标从0开始。在C#中我们也把下标叫作索引。
语法:
数组名[下标]
如果在程序中需要得到数组长度,应该使用“数组名.Length” 语句获得,而不是用数组定义的长度。
2、循环结构
1、while循环
while循环是先判断条件是否满足,如果条件成立再执行循环体,
语法:
while(条件表达式)
{
//代码块
}
2、do-while循环
do-while循环是先执行再判断条件,所以至少会执行一次循环体中的语句。
语法:
do
{
//代码块
}while(条件表达式)
3、for循环
for循环常常用在确定循环次数的情况下。
语法:
for(表达式1;表达式2;表达式3)
{
//代码块
}
4、foreach循环
each 是每个的意思,foreach循环结构用于遍历应该数据集合的每一项,需要设置应该标识符依次表示其中的每一项。在循环期间,可以对各数据项执行指定的操作。
语法:
foreach(元素类型 元素变量名 in 数组)
{
//代码块
}
语法中的“元素”是一个只读变量。
3、跳转语句
1、break语句
除了在switch结构中可以使用break语句退出某个case语句外,也可以把它用于for 、while、do-while、foreach 循环结构。break语句将使程序跳出当前循环结构,并继续执行该循环后面的语句。
2、continue语句
continue 语句与break语句类似,它出现在for 、while、do-while、foreach 的循环结构中。但continue语句的作用是退出当前循环结构的本次循环,并开始执行当前循环结构的下次循环,而不是退出当前循环结构。C#中的break、continue语句的作用与Java是相同的。
break和continue语句对比
三、冒泡排序
冒泡排序速记口诀(升序)
- N个数字来排队,两两相比靠前。
- 外层循环N-1,内层循环N-1-i。
- 如果要降序排序,只要把程序中的大于号换成小于号就行了。
使用属性升级MyBank
一、访问修饰符
访问修饰符 | 访问权限 | 访问级别 |
---|---|---|
public | 不受任何限制 | 最高 |
private | 只有类的内部可以使用 | 最低 |
二、this关键字
在STUdent类中定义了SetName()方法,该方法的参数_name和类成员变量 _name名称相同,this关键字可以区分局部变量和成员变量。
三、C#属性
1、用属性实现字段封装
1、C#属性
在C#中,字段通常是私有的。如果要访问类中的字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方式我们称之为属性(property)。
语法:
private string _name;
public string Name
{
get { return _name;}
set {_name - value;}
}
2、属性的数据类型
定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。
3、属性的访问类型
只读属性:只包含get访问器。
只写属性:只包含set访问器。
读写属性:包含get和set访问器。
四、值传递
- 值传递分为基本数据传递和引用型数据传递
- 基本数据类型传递:形参所做修改不会影响实参
- 引用型数据类型传递:形参修改堆里面具体值的时候回影响实参
五、引用传递参数
方法中数据的传递除了值传递外,还可以引用传递参数。利用引用传递参数的方式可以在方法条用之后,仍然保留对参数的修改。
六、比较值传递与引用传递
- 值传递是将变量的值复制了一份传递给方法,使得该方法的形参和实参的值相同。在调用的方法中修改形参也只是对实参复制品的数据做更新,并没有真正改变实参的值。
- 引用传递是将要传递的对象的引用复制给对方的形参,使得被调用的方法直接对引用的对象进行更改,会影响实参原来的值。
深入C#的string类
一、C#中的string类
1、常用的字符串处理方法
方法 | 说明 |
---|---|
bool Equals(string value) | 比较一个字符串与另一个字符串value值的值是否相等。 |
int Compare(string strA, string strB) | 比较两个字符串的大小关系,返回一个整数。 |
int IndexOf(string value) | 获取指定的value字符串在当前字符串中第一个匹配的位置。如果找到了value,就返回它的位置;如果没找到,就返回-1. |
int LastIndexOf(string value) | 获取指定的value字符串在当前字符串中最后一个匹配的位置。如果找到了value,就返回它的位置;如果没找到,就返回-1. |
string Join (string separator,string[] value) | 把字符串数组value中的每个字符串用指定的分隔符separator连接,返回连接后的字符串 |
string[] Split (char separator) | 用指定的分隔符separator分割字符串,返回分割后的字符串数组 |
string Substring (int startIndex,int length) | 从指定位置starIndex开始检索长度为length的子字符串 |
string ToLower() | 获得字符串的小写形式 |
string ToUpper() | 获得字符串的大写形式 |
string Trim() | 去掉字符串前后两端多余的空格 |
2、连接分割字符串
string类另外两个常用方法Join()和Split()方法。它们的分别是连接和分割字符串。
3、Format隔式化
Format()方法允许把字符串、数字或者是布尔类型的变量插入到格式字符串当中,它的语法和Write Line()方法很相似。
语法:
Sting myString = string.Format("格式字符串",参数列表);
字符 | 说明 | 示例 | 输出结果 |
---|---|---|---|
C | 货币格式 | String.Format("{0:C3}",2000) | ¥2000.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、简单的类型转换
1、瘾式类型转换
对于任何数值类型A,只要其取值范围完全包含类型B的取值范围,就可以隐式转换为类型B。也就是说,int型可以隐 式 转换为float型或double型,float型可以隐式转换为double型。
2、显示类型转换
与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显示转换。
2、数值类型与字符串之间的转换
1、字符串转换为数值类型
可以调用不同的数值类型的Parse()方法
int.Parse(Console.ReadLine());
int.Parse(string);
float.Parse(string);
double.Parse(string);
2、数值型转换为字符串
只要调用ToString()方法就可以了。
int age = 18;
string myage = age.ToString();
三、使用Convert类进行转换
方法 | 说明 |
---|---|
Convert.ToInt32() | 转换为整型(int型) |
Convert.ToSingle() | 转换为单精度浮点型(float型) |
Convert.ToDouble() | 转换为双精度浮点型(double型) |
Convert.ToString() | 转换为字符串类型(string型) |
行显示转换。
2、数值类型与字符串之间的转换
1、字符串转换为数值类型
可以调用不同的数值类型的Parse()方法
int.Parse(Console.ReadLine());
int.Parse(string);
float.Parse(string);
double.Parse(string);
2、数值型转换为字符串
只要调用ToString()方法就可以了。
int age = 18;
string myage = age.ToString();
三、使用Convert类进行转换
方法 | 说明 |
---|---|
Convert.ToInt32() | 转换为整型(int型) |
Convert.ToSingle() | 转换为单精度浮点型(float型) |
Convert.ToDouble() | 转换为双精度浮点型(double型) |
Convert.ToString() | 转换为字符串类型(string型) |