C#语言学习
1.变量的声明和初始化
访问修饰符 数据类型变量名称
public int a;
private char b;
初始化(赋值)
int a;
a=50;
char b=’b’;
变量的命名规则
必须字母开头,只能有字母,下划线(-),数字组成
变量名不能包含空格,标点符号和运算符等其他符号
不能使用C#的保留字
不能与C#的关键字和库函数名相同
2.常量
访问修饰符 const 数据类型 常数名(标识符)=常量值;
常用修饰符:public private protected internal new
●带有私有访问(private)的常量必须以骆驼命名法声明,并以下划线开头
●带有公共修饰符(public),受保护的修饰符(protected)的常量必须以帕斯卡命名
public const double CarPrice =1520.25; 帕斯卡命名法 名称的第一个单词首字母大写,后面单词也是
public const string _carName=奇瑞; 骆驼命名法 混合下划线构成变量名称,且第一个单词的首字母小写
3.控制语句
条件语句语句
if语句
if(表达式)
{
语句块;
}
if else语句
if(表达式)
{
语句块 1;
}
else
{
语句块2;
}
if else if else语句
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
...
else if(表达式n)
{
语句块n;
}
else
{
语句块n+1;
}
嵌套if语句
if(表达式1)
{
if(表达式2)
{
语句块1;
}
else
{
语句块2
}
else
{
If(表达式3)
{
语句块3;
}
else
{
语句块4;
}
}
switch语句
switch(表达式)
{
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
......
case 常量 n:
语句块n;
break;
defalut:
语句块n+1;
break;
}
4.循环语句(迭代语句)
for循环语句
for(表达式1;表达式2;表达式3)
{
语句块1;
}
while 循环语句
while(表达式)
{
语句块1;
}
do while 循环语句
do
{
语句块;
}while(表达式);
foreach语句
foreach循环语句是C#特有的,特殊的for循环,用于遍历迭代对象的所有用户定义的属性,数组的所有元素或者集合里的所有元素(可以输出每个元素)
foreach(类型 变量名 in 集合)
{
语句块1;
}
5.跳转语句
break语句
continue语句
return 语句
goto语句
6.一维数组
声明数组
数组类型[] 数组变量
int[] num;
初始化数组
使用new来初始化并赋值
int[] num1= new int[3]{15,2,6};
直接赋值
int[] num2=new int{15,2,6};
省略new关键字,直接赋值
int[] num3={15,2,6};
二维数组
类型[,]数组名称;
int[,] list =new int[2,3];
list[0,0]=1;
list[0,1]=2;
list[0,2]=3;
list[1,0]=4;
list[1,1]=5;
list[1,2]=6;
初始化
int[,]list={
{1,2,3],
{4,5,6},
};
锯齿数组(C#特殊的数组,也称交错数组,每种数组长度都不相同)
数组类型[][]数组名称 =new 数组类型[数组行数];
double[][] list=new double[3][];
list[0]=new double[3]{1,2,3};
list[2]=new double[7]{5,5.1,2,2.1,3,3.5,4} ;
list[1]=new double[2]{1,2.5};
数组操作
在C#中,数组可以被认为一个对象,所有涉及对数组对象的操作都要用到Array类,Array类是所有数组的抽象基类。可以使用该类为每一个C#数组定义方法和属性,该类提供对数组操作的方法。
声明数组
使用Array类的CreatInstance()方法
Array floatArray=Array.CreateInstance(typeof(float),5);
二维数组
int[]a={2,4};
int[]b={1,2};
Array listarray=Array.CreateInstance(typeof(int),a,b);
第一个参数表示数组类型,第二个参数表示要创建数组维度的大小,第三个参数表示要创建数组索引下限的数组
获取数组的长度
Array类提供两个属性Length和LongLength都可以获取数组长度
int[] Array=new int[100];
int length=array.Length;
int[] longarray=new int[100000];
long longlenth =longarray.LongLenth;
为数组赋值
Array类的SetValue()方法来进行设置
int[]array=new int[100];
array[0]=5;
array.SetValue(20,1);
获取元素值
Array类的GetValue()方法获取
int[]array=new int[100];
int value1=array[0];
int value2=(int)array.GetValue(2); // 获取元素下标为2的元素的值
获取元素的索引
Array类提供了两个方法用于获取元素的索引:IndexOf()方法和LastIndexOf()方法
IndexOf()方法用于获取匹配元素的第一个索引值
LastIndexOf()方法用于获取匹配元素的最后一个索引值
int[] array= new int[100];
int index = Array.IndexOf(array,52);
int lastindex=Array.LastIndexOf(array,23);
7.面向对象编程
面向对象的内容主要涉及对象、类及传递的消息
对象(objec)
对象的状态 对象的行为 对象的标识
类
类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述。例如‘树’类
消息
对象之间需要交流,则需要传递消息
运行一个面向对象的程序时,需要以下三个步骤:
(1)根据需要创建对象
(2)将消息从一个对象传递到另一个对象
(3)不再需要该对象,删除该对象
类
类是对象的模板,它指定了数据以及操作数据的代码,对象是类的实例化。
定义类
[修饰符]class类名[:基类和实现的接口列表]{类成员}
修饰符可以是:abstract、sealed、public、protected、interal、private
类的字段
修饰符 字段类型字段名
class Program
{
public string name; \\声明字段name
public int id; \\ 声明字段id
public double score; \\ 声明分数score
static void Main(string[]args)
{
}
}
类的属性
属性是提供对对象或类的特性进行访问的成员,字段的正常延伸
static修饰符的为静态属性
virtual修饰符的为虚拟属性
override修饰符是为覆盖属性
abstract修饰符的为抽象属性
对象
对象的生存周期
●构造阶段:对象最初进行实例化的时期,这个初始化的过程称为析构阶段,由构造函数完成。
●析构阶段:在删除一个对象的时,常常需要进行一些清理工作,例如释放内存,由析构函数完成。
创建对象
Person person=new person;
创建一个对象后可以使用(.)操作来访问它的成员
string name =person.name
对象的清理
●用户执行相同的整理工作,也就是通过写一个析构方法(Destructor)来完成
●原始内存必须归还给堆(Heap),因为对象存在的内存是必须回收的。
方法
无参方法
修师符 返回值类型 方法名()
{
//方法体
}
有返回值,使用return语句
public int GetInt()
{
return23;
}
有返回值,使用void
punlic void Showname()
{
Console.WriteLine(“duangchunyang”);
}
对象和类
静态特征:字段属性
动态行为:方法
1)注释:组合键 Ctrl+K+C
2)取消注释:组合键 Ctrl+K+U
1)调试(启动):F5;
2)调试(重新启动):使用组合键“Ctrl+Shift+F5”;
3)调试(开始执行不调试):使用组合键“Ctrl+F5”;
4)调试(逐语句):F11;
5)调试(逐过程):F10;
6)设置断点:F9。
构造方法
构造方法的作用:为属性赋值
如果没有显示定义构造方法,则会有一个默认的无参数的构造方法
如果显示定义了的构造方法,则没有默认的构造方法
只能用new方法名()的形式调用构造方法
构造方法通常声明为public
构造函数是在实例化对象时自动调用的函数,它们必须与所属的类同名,且不能有返回值,每个类都有自己的构造函数,通常使用构造函数来初始化字段的值。
无参构造函数
class HS
{
public HS()
{
Console.WriteLine(“我是声明的构造函数”);
}
}
class Program
{
static void Main(string[]args)
{
HS hs=new HS();
Console.ReadLine();
}
}
面向对象的关键技术
public是公共字段 可以在类外被修改 不安全
private是私有字段 不可以在类外访问 无法使用
封装
隐藏对象的信息留出访问的接口
使用属性进行封装
class Child
{ 使用方法
private string _sex; 隐藏字段 隐藏对象信息用private
public string Sex;公开字段 留出访问接口用public声明属性形式
{
get{return _sex;} 读 访问器
set{_sex=value;} 写 访问器
}
}
访问字段字母小写
访问属性字母大写
方法的重载
同一个类中,多个方法名字相同但是参数不同
public void EatSugar(string sugar)
public void EatSugar(int count)
结构关键字struct
1.结构是值类型(类是引用类型)
2.结构中可以定义字段、属性和方法
3.不能为结构中的字段赋初始值
4.结构的构造方法中必须为所有字段赋值
5.不能为结构显示定义无参数的构造方法
6.结构类型的对象可以不实例化
enum为定义一个枚举类型。枚举属于值类型,枚举中不能定义字段属性和方法。
结构为:
enum 类型名
{
男,女//枚举类型(类型的范围,枚举值是从0开始的整数值。 )