C#

一、第一个C#程序

1. .NET与C#

1.1 .NET概述与C#应用

.NET是Microsoft .NET的简称,是基于Windows平台的一种技术。它包含了能在.NET Framework平台运行的所有程序语言。.NET Framework是微软为开发应用程序创建的一个富有革命性的新平台,是一个创建,部署,运行应用程序的多语言多平台环境。C#语言在.NET Framework平台上运行,最主要的原因是C#完全面向对象。

1.2 IDE环境

微软推出了强大的平台和技术,并提供了强大的集成开发环境(IDE)来支持,这就是Visual Studio,它集成了.NET Framework ,是目前最流行的.NET 平台开发环境。

2. 第一个C#程序的创建

2.1 新建程序

创建并运用程序包括三步:新建项目→生成可执行文件→运行。

2.2 认识C#程序

2.2.1 namespace关键字

namespace(命名空间)是C#中组织代码的方式,它的作用类似于Java中的package(包)。

2.2.2 using关键字

使用using关键字来引用其他命名空间,它的作用和Java中的import类似。

2.2.3 class关键字

在C#里使用class关键字表示类,编写的代码都包含在一个类里面,类要包含在一个命名空间中。但是与Java不同的是,不要求类名必须与源文件的名称一样。

2.2.4 Main()方法

它与Java中的Main()方法作用一样,是程序运行的入口。首字母必须大写,Main()方法的返回值可以是void或者int类型,Main()方法可以没有命令行参数。

static void Main(string[] args)
{    
}
static int Main(string[] args)
{
}
static void Main()
{    
}
static int Main()
{    
}

3. C#中的变量和常量

3.1 C#中的数据类型

基本数据类型:int, long, float, double, char, bool, byte, short

引用数据类型:string, class, array, 集合

3.2 C#中的变量

语法:

数据类型 变量名称;

C#的变量命名规则与Java基本相同,只是“$”符合在C#中是不能使用的。

命名规范如下:

组成:52个英文字母,10个数字,下划线,除此之外不能含有其他字符

开头:只能以字母或下划线开头

不能使用:不能是C#中的关键字

3.3 C#中的常量

常量是在程序运行过程中保持不变的值。

语法:

const 数据类型 常量名称 = 值;

命名规范如下:

a:常量名称必须具有一定实际意义

b:常量名称最好以大写字母来命名,中间用下划线来连接。

c:常量名称长度最好不要超过25个字符,否则可读性差。

4. Console类

Console是C#中的控制台类,能更方便的输入|输出。

语法:

Console.WriteLine();		//输出
Console.WriteLine(值);
Console.WriteLine("格式字符串",变量列表);
Console.ReadLine();      // 输入

5. 类和对象

5.1 自定义方法

语法:

[访问修饰符] 返回值类型 方法名(参数列表)
{
    //方法的主体
}

5.2 理解类和对象

类是创建对象的模板,对象是类的一个具体实例,这就是类和对象之间的关系。

语法:

[访问修饰符] class 类名
{
	//类的主体    
}

5.3 注释

C#的注释分为三种:

//第一种单行注释
/*
*第二种多行注释中的块注释
*/
///
///第二种多行注释中的文档注释
///
#region  折叠注释
//第三种
#endregion

5.4 VS调试

a:设置断点(断点:breakpoint)

b:监视变量值

程序调试时用的快捷键:

F5:开始调试

Shift+F5:停止调试

F9:设置或取消断点

Ctrl+F9:取消断点

F10:单步执行

F2:转到所调用过程或变量的定义

Ctrl+F2:将焦点转移到类的下拉列表框

二、C#语法快速热身

1. 选择结构

1.1 if结构

简单if结构语法:

if(条件表达式)
{
	//代码块    
}

if-else结构语法:

if(条件表达式)
{
	//代码块    
}
else
{
    //代码块
}

多重if结构语法:

if(条件表达式1)
{
	//代码块1    
}
else if(条件表达式2)
{
    //代码块2
}
else if(条件表达式3)
{
    //代码块3
}
else
{
    //代码块4
}

嵌套if结构语法:

if(条件表达式1)
{
	if(条件表达式2)
    {
        //代码块1    
    }
    else
    {
        //代码块2
    }    
}
else
{
    //代码块3
}

1.2 switch结构

switch结构中case子句的摆放是没有顺序的,注意任意两个case语句不能具有相同的值,case子句中的值必须是常量表达式,不允许使用变量。

语法:

switch(表达式)
{
    case 常量表达式1:
    	break;    //必须有
    case 常量表达式2:
    	break;    //必须有
    case 常量表达式3:
    	break;    //必须有
    ……
    default:
        break;    //必须有
}

2. 数组与循环

2.1 一维数组

数组声明 语法:

数据类型[] 数组名;
数据类型 数组名[];//错误,不能把方括号放在数组名后面。

数组长度 语法:

数组名.length;		//声明的长度一定要等于初值得个数
数组名[下标];

2.2 循环结构

2.2.1 while循环结构

while循环先判断条件是否满足,如果条件成立再执行循环体。

语法:

while(条件表达式)
{
    //代码块
}

2.2.2 do-while循环结构

do-while循环先执行再判断,至少执行一次循环体中的语句。

语法:

do
{
    //代码块
}while(条件表达式);

2.2.3 for循环结构

for循环常常用在确定循环的次数下使用。

语法:

for(表达式1;表达式2;表达式3)
{
    //代码块
}

2.2.4 foreach循环

each是每个的意思,foreach循环结构用于遍历一个数据集合的每一项,需要设置一个标识符(变量)依次表示其中的每一项。“元素”是一个只读变量。foreach循环结构的执行过程是循环体依次取出数组中的每个元素,然后对每个元素都执行一次循环体的操作。

语法:

foreach(元素类型 元素变量名 in 数组)
{
    //代码块
}

2.3 跳转语句

2.3.1 break语句

break语句将使程序跳出当前循环结构,并继续执行该循环后面的语句。

2.3.2 continue语句

continue语句的作用是退出当前循环结构的本次循环,并开始执行当前循环结构的下一次循环,而不是退出当前循环结构。

3. 冒泡排序

冒泡排序是从底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换它们的位置;否则保持原样。

实例:

for(int i = 0;i < scores.Length - 1;i++)
{
	for(int j = 0;j < scores.Length - 1 - i;j++)
    {
        if(scores[j] > scores[j + 1])
        {
            int temp = scores[j];
            scores[j] = scores[j+1];
            scores[j+1] = temp;
        }
    }    
}

冒泡排序速记口诀(升序):

a:N个数字来排队,两两相比小靠前

b:外层循环N-1,内层循环N-1-i

c:如果是降序,只要把程序中的大于号换成小于号就行

三、使用属性升级MyBank

1. private访问修饰符

1.1 访问修饰符

C#中的修饰符分为四种:public(公有的),private(私有的),protected(受保护的),internal(默认的)。

2. this关键字

this关键字是指当前对象的本身,通过this可以引用当前类的成员变量和方法。

3. C#属性

3.1 用属性实现字段封装

3.1.1 C#的属性

在C#中,字段通常是私有的。如果要访问字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方法叫属性。

语法:

private string_name;
public string Name
{
	get{return_name;}
	set{_name = value;}
}

get访问器用来返回相应的私有字段的值。get访问器与方法相似,必须用return语句返回字段的值。执行get访问器相当于读取类中私有字段的值。

set访问器用来设定相应的私有字段的值。set访问器类似于返回类型为void的方法。它使用一个隐含的输入参数value。当对属性赋值时,将会调用set访问器,并将新的参数值赋予对应的字段。

3.1.2 属性的数据类型

定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。属性的类型可以是一个类或一个数组。

3.1.3 属性的访问类型

属性的访问类型如下:

只读属性:只包含get访问器

只写属性:只包含set访问器

读写属性:包含get和set访问器

3.2 面向对象的特征——封装

在面向对象的编程中,封装可以理解为将数据和操作方法保存在一起的技术,或是有选择的隐藏或公开类中的属性和方法的过程。封装的具体实现是将成员变量,方法和属性以类的形式进行封装,在类或对象之间通过消息传递进行交流,而传递消息是通过调用类公开的方法完成的。

4. 值传递和引用传递

值传递:在被调用方法中对参数的值进行了修改,在方法调用之后,参数仍然是原来的值。将变量的值复制一份传递给方法,使得该方法的形参和实参的值相同。

引用传递:利用按引用传递参数的方式可以在方法调用之后,仍然保留对参数值得修改。使用ref修饰的参数必须在调用的方法中赋值。要传递的对象的引用复制给方法的形参,使得被调用的方法直接对引用对象进行更改,会影响实参原来的值。

四、深入C#的String类

1. C#中的String类

1.1 常用的字符串处理方法

方法 说明
bool Equals(string value) 比较一个字符串与另一个字符串value的值是否相等
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() 去掉字符串前后两端多余的空格

1.2 “==”和Equals()

“==”判断的是两个字符串对象在内存中的首地址,即判断是否是同一个字符串对象,而Equals()方法判断的是两个字符串对象的值是否相等。

1.3 连接分割字符串

String类另外两个常用的方法Join()和Split()方法。它们的功能分别是连接和分割字符串。

1.4 Format格式化

格式字符串和参数列表的形式输出应用程序的数据。

语法:

String 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

2. 类型转换

2.1 简单的类型转换

2.1.1 隐式类型转换

规则:对于任何数值类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。

2.1.2 显式类型转换

规则:与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显式转换。

2.2 数值类型与字符串之间的转换

将字符串转换为其他类型。

语法:

int.Parse(Console.ReadLine());

2.3 使用Convert类进行转换

任何基本类型之间的相互转换。

常用Convert类的类型转换方法:

方法 说明
Convert.ToInt32() 转换为整型(int型)
Convert.ToSingle() 转换为单精度浮点型(float型)
Convert.ToDouble() 转换为双精度浮点型(double型)
Convert.ToString() 转换为字符串类型(string型)

你可能感兴趣的:(C#)