C#语言基础

C#语言基础

一、C#语法基础

.NET概述

.NET是基于Windows平台的一种技术。包含了能在.NET Framework平台运行的所有编程语言。它包含了一个庞大的代码库,各种能运行在.NET Framework平台上的语言都可以共享这个代码库。

认识C#程序

C#(发音为 C Sharp)是一门完全面向对象的语言,也是Microsoft.NET平台运行的主流语言。

书写规范:C#中大括号"{“和”}"各占据新的一行

以下为一个普通的C#程序示例:

using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string [] args)
        {
            Console.WriteLine("Hello World");
            Console.ReadLine();
		}
    }
}

以上代码的组成部分 一 一 说明:

1.namespace关键字

namespace(命名空间)是C#中组织代码的方式,它的作用类似于Java中的package(包),可以大大的提高管理和使用效率。

2.using关键字

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

3.class关键字

C#是一门完全面向对象的语言,使用class关键字表示类。编写的代码都应该包含在一个类中,类要包含在一个命名空间中

4.Main()方法

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

语法有四种

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

以上都是C#中的Main()方法语法。

5.关键代码

Main()方法中添加的两行代码就是这个小程序的关键代码,用于输出和输入

Console.WriteLine();   //从控制台输出内容  输出后换行
Console.Write();       //从控制台输出内容  输出后不换行
Console.ReadLine();    //从控制台输入内容

C#中的变量和常量

C#中的数据类型

常用的数据类型 Java C# 举例
整型 int int 年龄
浮点型 float float 成绩
双精度型 double double 圆周率
字符串型 String string 姓名
布尔型 boolean bool 是否正确

C#中的布尔型关键字与Java不同,使用的是bool,C#中字符串型的关键字首字母是小写的

当然C#中的数据类型也不止这些,也包括Java中的基本数据类型,引用数据类型。

需要注意的是数组与Java中有所不同

声明不同。Java有两种方式,而C#只有一种,如下:

数据类型 [] 数组名;

赋值不同,Java中不能赋值的同时给长度,而C#可以:

数据类型 [] 数组名 = new 数据类型[长度]{值};

但是长度必须与值的个数一致

C#中的变量

C#中的变量声明方式使用的语法为

数据类型 变量名称;

C#中的变量命名规则与Java基本相同,有两点不同:1.不能包含“$”符号,2.不能以数字开头。

总结变量命名规则

1、以字母、数字、" _ " 组成,除此之外不能包含其他任意字符。

2、只能以字母和 " _ " 开头。

3、不能使用C#中的关键字,不能包含任意特殊字符。

4、使用驼峰命名法命名,即第一个单词首字母小写,其他单词首字母大写。

C#中的常量

用于在程序中一旦设定就不允许被修改的值,语法:

const 数据类型 常量名 = 值;

需要使用const关键字修饰。

如何使用:用于程序中被经常引用的值、用于程序中具有特定含义的值。

C#中的Console类

C#向控制台输出

有三种方法:

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

第三中方式中,WriteLine()的参数由两部分组成:格式字符串和变量列表。在格式字符串中,依次使用{0}、{1}、{2}···代表要输出的变量,{0}这些表示占位符,将变量依次排列在变量列表中,{0}表示变量列表第一个变量,{1}表示变量列表的第二个变量,以此类推。

C#向控制台输入

语法:Console.ReadLine();

该语法只是用于往控制台输入字符串类型,但是需要输入其他类型时就需要类型转换了:

类型转换

1、隐式:自动转换

​ 在类中当一个数据类型比另一个大时(包含),就可以自动转换,例如

int b = 1;
long a = b;

2、强转

有两种:

1、数据类型.Parse(String);

这种类型只是用于string类型转换为其他类型,不接受其他数据类型作为参数。

2、Convert.To数据类型(任意数据类型)

Convert类可以在各种基本类型之间执行数据类型的互相转换。Convert类为每种类型转换都提供了一个对应的方法,如下表所示:

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

这些方法中的参数就是需要转换的数据

类和对象

C#中类的成员分为三个:字段、属性、方法。

字段通常是私有的。如果要访问类中的字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方式称之为属性。

类的三大特性:封装、继承、多态。这里主要说封装。

自定义方法

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

访问修饰符:

private(私有的): 只有当前类能访问
protected(受保护的): 只有当前项目能访问
public(公开的): 不受限制。任何类都可以访问
internal(默认的): 与受保护的相同

方法的返回值类型:可以是基本数据类型的 如果不需要返回值需要使用void关键字。

方法名:每个自定义的方法都有一个方法名。命名方式使用帕斯卡命名法,即每个单词首字母大写。

参数列表:调用方法时,可以向方法中传递参数,这些参数构成了参数列表。

方法主体:方法主体就是这个方法实现某一特定功能的代码。

C#属性

1.用方法保证数据安全

2.用属性实现字段封装:

封装是将数据和操作方法保存在一起的技术,或者有选择的隐藏或公开类中的属性和方法。

private string name;
public string name
{
	get{return name;}   //只读
	set{name=value;}	//赋值(只写属性)
}

get:用来返回相应的私有字段的值,必须有return。

set:用来设定相应的私有字段的值。需要赋值。

this关键字

使用this关键字可以解决成员变量和局部变量名称的冲突问题。

this是当前类的引用,不能在静态成员中引用。

this关键字代表的是当前的对象,在类的内部,可以用this关键字访问类的成员。

值传递和引用传递

当方法为有参方法时,就需要传递参数,这里就涉及到了实参与形参之间的相互影响。

值传递:分为基本数据类型和引用数据类型:

​ 基本数据类型:形参所作修改不会影响实参。

​ 引用数据类型:形参如果修改具体的值会影响实参。修改的是地址对实参没有影响。

引用传递: 无论是形参还是实参所作修改都会受影响。实参与形参都需要ref关键字。

public void 方法名(ref 参数1,ref 参数2,···)   //形参
{
	......
}
this.方法名(ref 参数1,···)                     //实参
//以上形参所做改变无论如何都会影响实参。

二、C#中的结构类型

1、顺序结构

就是程序按照顺序,自上而下每一句代码都会执行。

2、选择结构

与Java结构中相同,只有满足某个条件才会执行该代码块,否则不执行。

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
}

if结构书写代码规范

1、为了使if结构更加清晰,应该把每个if或else包含的语句都用大括号括起来

2、相匹配的一队if和else应该左对齐

3、内层的if结构相对于外层的if结构要有一定的缩进

switch选择结构

C#的switch结构与Java略有不同,C#要求每个case和default语句中都必须要有break语句,除非两个case中间没有其他语句,那么前一个case可以不包括break,C#中的判断更加灵活,判断的表达式或变量可以是字符串类型,语法如下:

			Java										C#
switch(表达式)									switch(表达式)									
{											  {
    case 常量表达式1:								case 常量表达式1:
    //语句1;										  //语句1;
    	break;/*可以没有*/								 break;//必须有
     case 常量表达式2:								case 常量表达式2:
    //语句2;										  //语句2;
    	break;/*可以没有*/								 break;//必须有
    ······											······
    default:										default:
    //语句n;										  //语句n;
    	break;/*可以没有*/								 break;//必须有
}											  }

注意:

switch 结构中case子句的摆放是没有顺序的,可以把default子句放在最前面,但要注意任何两个case语句不能具有相同的值。case子句中的值必须是常量表达式,不允许使用变量。

3、循环结构

与Java结构中相同,只有满足条件才会循环。

while循环

语法:

while(条件表达式)        //先判断条件是否满足,如果条件成立就执行循环体
{
	//代码块
}			
do-while循环

语法:

do                        //先执行再判断条件,至少执行一次
{
    //代码块
}while(条件表达式);	
for循环

语法:

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

与Java中的相同,可以去我之前写的博客参考一下。

foreach循环

语法:

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

在语法中,元素类型值的就是数据类型,“元素”是一个只读变量。

each是每个的意思,foreach循环结构用于遍历一个数据集合的每一项。

注意:foreach结构不能改变数组中各元素的值;如果需要改变数组中元素的值,应该使用for循环。

循环的区别:

while循环:先判断条件是否成立,若条件成立,则执行循环条件。

do—while循环:循环体先执行一次,再判断条件是否成立。

for循环:必须使用整型变量做循环变量计算器。

foreach循环:用于遍历给定数组的所有值。

跳转语句

与java里的相同,在C#中的跳转语句也是一样的。

break

除了在switch结构中使用break退出整个case语句外,也可以用于while,do—while循环等,break语句将程序跳出当前循环结构,并继续执行该循环体后面的语句。

continue

与break语句类似,continue的作用与Java是相同的即跳出本次循环进入下一轮循环。

冒泡排序

冒泡排序就像它的名称一样,冒泡排序是从底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换它的位置,否则保持原样,如此重复下去,直到所有的元素按从小到大的顺序排列。使用二重循环来排列。内层循环控制循环条件,外层循环控制次数。

冒泡排序速记(升序):

1.N个数字来排队,两两相比小靠前。

2.外层循环N-1,内层循环N-1-I。

3.如果要降序排列,只要把程序中的大于号换成小于号。

三、深入了解string类

常用的字符串处理方法

方法 说明
string Trim() 去掉字符串前后两端多余的空格
bool Equals(string value) 比较一个字符串与另一个字符串value的值是否相等,若两者相等,返回true否则 返回false
int IndexOf(string value) 获取value在当前字符串中出现的首个位置
int lastIndexOf(string value) 获取指定的字符串value在当前字符串中最后一个匹配的位置
string Substring(int sta) 从指定位置sta开始检索长度为length的字符串
string ToUpper() 获得字符串大写的形式
string ToLower() 获得字符串的小写形式
string []Split(char separator) 用指定的分隔符separator分割字符串,返回分割后字符串的数组
int Compare(string A,strin g B) 比较两个字符串的大小关系,返回一个整数。若前者大,返回值大于0,反正则小于0,相等就返回0

注意:比较“==”和“Equals()”方法:

运算符""和“Equals()”应用于两个字符串,所判断的内容是有区别的,简单来说”“判断的是两个字符串对象在内存中的首地址,即判断是否是同一个对象。

“Equals()”方法判断的是两个字符串对象的值是否相等。

连接和分割字符串

两种方法 Join()和Split()方法。

//输入提示
Console.WriteLine("请输入一个字符串");
string input=Console.Readine();

//以空格作为分隔符分割字符串
a=input.Split(' ');

//将分割后的字符串使用下划线连接
b=input.Join("-",input);

Format格式化

C#的string类提供的一个Format()方法对输出的字符串进行格式化,Format()方法允许把字符串,数字或布尔类型变量插到格式化字符中。语法如下

String myString =String.Format("格式化字符串",参数列表);

{索引 [,对齐] [: 格式字符串]}

例如:

String myString =String.Format("{0} 乘以 {1} 等于 {2}",2,3,2*3);
//输出2*3=6;

​ 格式化数值结果表

字符 说明 示例 输出
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

C#中的字符串与Java中的相差无几。只是多了几个方法,并无大碍。

你可能感兴趣的:(C#语言基础)