.NET是Microsoft .NET的简称,是基于Windows平台的一种技术。它包含了能在.NET Framework平台运行的所有程序语言。.NET Framework是微软为开发应用程序创建的一个富有革命性的新平台,是一个创建,部署,运行应用程序的多语言多平台环境。C#语言在.NET Framework平台上运行,最主要的原因是C#完全面向对象。
微软推出了强大的平台和技术,并提供了强大的集成开发环境(IDE)来支持,这就是Visual Studio,它集成了.NET Framework ,是目前最流行的.NET 平台开发环境。
创建并运用程序包括三步:新建项目→生成可执行文件→运行。
namespace(命名空间)是C#中组织代码的方式,它的作用类似于Java中的package(包)。
使用using关键字来引用其他命名空间,它的作用和Java中的import类似。
在C#里使用class关键字表示类,编写的代码都包含在一个类里面,类要包含在一个命名空间中。但是与Java不同的是,不要求类名必须与源文件的名称一样。
它与Java中的Main()方法作用一样,是程序运行的入口。首字母必须大写,Main()方法的返回值可以是void或者int类型,Main()方法可以没有命令行参数。
static void Main(string[] args)
{
}
static int Main(string[] args)
{
}
static void Main()
{
}
static int Main()
{
}
基本数据类型:int, long, float, double, char, bool, byte, short
引用数据类型:string, class, array, 集合
语法:
数据类型 变量名称;
C#的变量命名规则与Java基本相同,只是“$”符合在C#中是不能使用的。
命名规范如下:
组成:52个英文字母,10个数字,下划线,除此之外不能含有其他字符
开头:只能以字母或下划线开头
不能使用:不能是C#中的关键字
常量是在程序运行过程中保持不变的值。
语法:
const 数据类型 常量名称 = 值;
命名规范如下:
a:常量名称必须具有一定实际意义
b:常量名称最好以大写字母来命名,中间用下划线来连接。
c:常量名称长度最好不要超过25个字符,否则可读性差。
Console是C#中的控制台类,能更方便的输入|输出。
语法:
Console.WriteLine(); //输出
Console.WriteLine(值);
Console.WriteLine("格式字符串",变量列表);
Console.ReadLine(); // 输入
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
//方法的主体
}
类是创建对象的模板,对象是类的一个具体实例,这就是类和对象之间的关系。
语法:
[访问修饰符] class 类名
{
//类的主体
}
C#的注释分为三种:
//第一种单行注释
/*
*第二种多行注释中的块注释
*/
///
///第二种多行注释中的文档注释
///
#region 折叠注释
//第三种
#endregion
a:设置断点(断点:breakpoint)
b:监视变量值
程序调试时用的快捷键:
F5:开始调试
Shift+F5:停止调试
F9:设置或取消断点
Ctrl+F9:取消断点
F10:单步执行
F2:转到所调用过程或变量的定义
Ctrl+F2:将焦点转移到类的下拉列表框
简单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
}
switch结构中case子句的摆放是没有顺序的,注意任意两个case语句不能具有相同的值,case子句中的值必须是常量表达式,不允许使用变量。
语法:
switch(表达式)
{
case 常量表达式1:
break; //必须有
case 常量表达式2:
break; //必须有
case 常量表达式3:
break; //必须有
……
default:
break; //必须有
}
数组声明 语法:
数据类型[] 数组名;
数据类型 数组名[];//错误,不能把方括号放在数组名后面。
数组长度 语法:
数组名.length; //声明的长度一定要等于初值得个数
数组名[下标];
while循环先判断条件是否满足,如果条件成立再执行循环体。
语法:
while(条件表达式)
{
//代码块
}
do-while循环先执行再判断,至少执行一次循环体中的语句。
语法:
do
{
//代码块
}while(条件表达式);
for循环常常用在确定循环的次数下使用。
语法:
for(表达式1;表达式2;表达式3)
{
//代码块
}
each是每个的意思,foreach循环结构用于遍历一个数据集合的每一项,需要设置一个标识符(变量)依次表示其中的每一项。“元素”是一个只读变量。foreach循环结构的执行过程是循环体依次取出数组中的每个元素,然后对每个元素都执行一次循环体的操作。
语法:
foreach(元素类型 元素变量名 in 数组)
{
//代码块
}
break语句将使程序跳出当前循环结构,并继续执行该循环后面的语句。
continue语句的作用是退出当前循环结构的本次循环,并开始执行当前循环结构的下一次循环,而不是退出当前循环结构。
冒泡排序是从底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换它们的位置;否则保持原样。
实例:
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:如果是降序,只要把程序中的大于号换成小于号就行
C#中的修饰符分为四种:public(公有的),private(私有的),protected(受保护的),internal(默认的)。
this关键字是指当前对象的本身,通过this可以引用当前类的成员变量和方法。
在C#中,字段通常是私有的。如果要访问字段,需要通过get和set访问器实现,这种结合了字段和方法的实现方法叫属性。
语法:
private string_name;
public string Name
{
get{return_name;}
set{_name = value;}
}
get访问器用来返回相应的私有字段的值。get访问器与方法相似,必须用return语句返回字段的值。执行get访问器相当于读取类中私有字段的值。
set访问器用来设定相应的私有字段的值。set访问器类似于返回类型为void的方法。它使用一个隐含的输入参数value。当对属性赋值时,将会调用set访问器,并将新的参数值赋予对应的字段。
定义类中的一个属性时,属性的数据类型必须与它所访问的字段类型一致。属性的类型可以是一个类或一个数组。
属性的访问类型如下:
只读属性:只包含get访问器
只写属性:只包含set访问器
读写属性:包含get和set访问器
在面向对象的编程中,封装可以理解为将数据和操作方法保存在一起的技术,或是有选择的隐藏或公开类中的属性和方法的过程。封装的具体实现是将成员变量,方法和属性以类的形式进行封装,在类或对象之间通过消息传递进行交流,而传递消息是通过调用类公开的方法完成的。
值传递:在被调用方法中对参数的值进行了修改,在方法调用之后,参数仍然是原来的值。将变量的值复制一份传递给方法,使得该方法的形参和实参的值相同。
引用传递:利用按引用传递参数的方式可以在方法调用之后,仍然保留对参数值得修改。使用ref修饰的参数必须在调用的方法中赋值。要传递的对象的引用复制给方法的形参,使得被调用的方法直接对引用对象进行更改,会影响实参原来的值。
方法 | 说明 |
---|---|
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() | 去掉字符串前后两端多余的空格 |
“==”判断的是两个字符串对象在内存中的首地址,即判断是否是同一个字符串对象,而Equals()方法判断的是两个字符串对象的值是否相等。
String类另外两个常用的方法Join()和Split()方法。它们的功能分别是连接和分割字符串。
格式字符串和参数列表的形式输出应用程序的数据。
语法:
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 |
规则:对于任何数值类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。
规则:与隐式类型转换相反,当要把取值范围大的类型转换为取值范围小的类型时,就需要执行显式转换。
将字符串转换为其他类型。
语法:
int.Parse(Console.ReadLine());
任何基本类型之间的相互转换。
常用Convert类的类型转换方法:
方法 | 说明 |
---|---|
Convert.ToInt32() | 转换为整型(int型) |
Convert.ToSingle() | 转换为单精度浮点型(float型) |
Convert.ToDouble() | 转换为双精度浮点型(double型) |
Convert.ToString() | 转换为字符串类型(string型) |