3、循环:
分为forforeachwhiledo-while三大循环是重点
结构图:
for①
for(条件)判断条件后执行
{执行体}
经典例子:
for(inti=0;i<128;i++)
{Console.Write("{0}",Convert.ToChar(i));
}
while②
while(条件)先判断后执行
{执行体}
do-while③
do{执行体}
while(条件)先执行后判断
foreach
foreach(数据类型标识符in表达式)
{
循环体
}。
例子:
假设一个类对象Person实例Listperson=newList();
foreach(variteminperson)
{
循环体
}。
跳转语句:
Break立即终止循环的
Continue立即终止当前的循环(执行下一循环)
Goto无条件跳转,可以跳出循环并跳转到标记了的代码位置上。
//exc:
定义一个标记用方式gotoexc;
Return跳出循环以及方法
int,也可以是用户自定义类型
三、数组:
就是一组具有相同类型和名称的变量的有序集合。
结构图:
静态初始化:
int[]mydate={6,7,8};
动态初始化:
int[]mydate=newint[3];数据类型[]数组名称=new数据类型[数组长度];
经典初始化40个学生的成绩:
for(inti=0;i<40;i++)
{str[i]=Convert.ToSingle(Console.ReadLine());
}
注:
每个数组中的元素的下标从0开始。
没有赋值情况下使用如果数据类型为整型或浮点型,其默认值为0;如果数据类型为布尔类型时,默认值为false;当数据类型为字符类型时,默认值为空(null).
1、数组的清空:
结构图:
Array.Clear(mydate,3,6);//调用基类中的清空方法,3是清空元素起始下标,6是清空元素的个数。
2、数组的查找:
intdata=Array.IndexOf(mydate,17);//调用IndexOF()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data(为索引其下标).
intdata=Array.LastIndexOf(mydate,17);//调用LastIndexOf()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data.
排序的几种:
Array.Sort(mydata);//调用正向排序(即是由小到大的排序),mydata这是数组名称
Array.Reverse(mydata);//调用反向排序(即是由大到小的排序),mydata这是数组名称
泛型集合
数组区别:
最显著的区别为:
数组一旦初始化后,数组元素的数量不能再改变;而List是集合,集合元素的数量可以动态变化。
主要利用System.Collections.Generic命名空间下面的List泛型类创建集合
ListListOfT=newList();中的"T"就是所要使用的类型,既可以是简单类型,如string、
String的常用用法
1:
Format参数化处理,相当于Console.WriteLine();
stringstr=String.Format("今天{0}很热","天气");//str="今天天气很热";
2:
NullOrEmpty判断字符是否为null或者为空,返回值为bool;
stringstr1="hahha";
boolb1=string.IsNullOrEmpty(str);//b1=false;
3:
Join字符串的合并
string.Join(stringstr,string[]strArr);//将数组strArr中的内容拼接成一个新的字符串,并在对应数组的每两项间添加分隔符str
stringstrs=string.Join(",",string[]{"w","e","r","t"});//strs="w,e,r,t";
4:
Contains判断字符串中是否包含某个字符,返回bool值。
stringstr="好累呀";
bool b=str.Contains("累");//b=true;
5:
EndsWith和StartsWith 判断是否是已某种字符串开始或者结束
stringstr="好大的雨呀";
bool b1=str.StartsWith("大");//b1=false;
bool b2-str.EndsWith("呀");//b2=true;
IndexOf和LastIndexOf 判断字符串第一次出现(IndexOf)和最后一次出现(LastIndexOf )的位置,如果没有出现过则返回值为-1
stringstr="今天的雨很大,天很冷";
inti=str.IndexOf("很");//i=4;
inti=str.LastIndexOf("很");//j=8;
intm=str.IndexOf("小");//m=-1;
6:
Replace字符串(字符也是可以的)替换,返回新的字符串
stringstr="好困呀";
strings=str.Replace("困","精神");//s="好精神呀";
7:
Insert插入
在字符串的index位置上插入字符,原来的字符依次后移,变成一个新的字符串
stringstr="夜深了";
strings=str.Insert(1,"已经");// s="夜已经深了"
7、Remove删除字符串(字符)
在字符串中移除从startIndex开始,长度为length的字符串,剩下的字符合为一个新的字符串(=.Remove(startIndex,length);)
stringstr="夜已经深了";
strings=str.Remove(1,2);//s="夜深了";
8:
Split 将字符串以sep数组中的字符分割,分割后得到的内容存到一个数组中(string[].Split(paramschar[]sep);)
stringstr="我,真的、好困;呀";
string[]s=str.Split(newchar(){',','、',';'});//s=string[]{"我","真的","好困","呀"};
9:
Substring截取字符以index开始截取,并截取lenth个字符(string.Substring(index,lenth))
stringstr="还在下雨";
strings=str.Substring(2,2);//s="下雨";
10:
ToCharArray将字符串转化为字符数组(.ToCharArray())
stringstr="雨已经小了";
char[]s=str.ToCharArray();//s=char[]{'雨',"已","经","小","了"};
11:
Trim()出去两边的空格
stringstr=" dd ";
strings=str.Trim();//s="dd";
12:
ToUpper(转换为大写)和ToLower(转换为小写)
strings="RaSer";
strings1=s.ToUpper();//s1="RASER";
strings2=s.ToLower();//s2="raser";
四、面向对象(OOP)
思想:
将数据及处理这些数据的操作都封装到一个称为类的(class)的数据结构中,使用这个类时只需要定义一个变量就行了。
结构图:
现实世界计算机语言
事物状态属性
行为方法(函数)
类:
就是包括了两个部分:
属性与方法
定义:
具有相同属性和服务的一组对象的集合。
声明类(类和变量一样也是一种数据类型)用的关键字是class
(修饰符)(关键字)(类名)(继承方式)(基类名)
{类成员(变量、常量、方法、属性、事件、索引器、定义);}
修饰符有public公众的任何类都可以后访问private私有的(默认的)类和方法只对本类里面的方法可见
protected受保护的本类可以访问和继承本类的子类可以访问internal内部的就是在同一命名空间下可以访问
protectedinternal继承的子类可以继承
如果是静态的则直接的用类名加上个成员即可
是实例的则用初始化一个对象,用对象名加上个成员名。
对象:
就是将算法与数据结构看做一个整体的,算法就是解决问题的方法,数据结构就是事物中各个属性之间的联系和组织形式。
对象的声明与访问:
属性与字段
属性与字段对比:
相同点:
都可以输入信息,可以给对象指定一个状态,来把对象的信息给描述出来。
不同点:
属性:
不能直接访问数据,就是该对象的状态,还能保证数据安全。
字段:
类一级的成员包括一些定义、常量、变量
方法:
就是对象的函数,可以处理一些问题,解决方法等。
对象=算法+数据结构
程序=对象+对象……+对象
五、属性
属性:
只写一个例子吧
privateintage;
publicintAge
{
get{returnage;//拿出去}如果只有它则是只读的
set{age=value;//放进去}如果只有它而没有上个则它是只写的
}
方法:
方法是一种用于实现可以由对象或类执行的计算或操作的成员.就是动作的实现,而属性则只是状态.
格式为:
访问级别(访问修饰符)返回类型方法名称(参数列表)
{方法体}
返回类型包括:
void(无返回值)intstringdouble等
方法在定义的时候,小括号里的参数为形式参数,而实参数为调用时主方法里的参数。
包括有四种:
1、无参无返回值
调用则是:
p.add();
2、无参有返回值
Console.WriteLine(p.add());
3、有参无返回值
p.add(8);
4、有参有返回值
需要实例化后格式
Programp=newProgram();
Console.WriteLing("结果是:
"+p.add(2,5));
也就是说无返回值的时候则直接调用其方法就能使用了,而有返回值时则先调用后输出了。
传递参数时:
包括值类型传递、引用类型传递、输出参数、参数数组
1、值类型传递:
是单向传递的过程,实参传递给形参,形参的改变不影响实参。
2、引用类型传递:
可修改的,前面要加上一个ref。
传的是地址,双向传递,形参的改变影响实参的结果。
不过引用类型在定义和调用时前都要加上一个ref
3、输出参数:
在参数前加一个out,就可以多设置一个输出参数。
4、参数数组:
必须用params修饰词明确指定。
数组名做为参数在传递相当于数组的起始地址,形参影响实参。
构造函数与析构函数:
主要用来对对象的初始化的回收对象资源。
一般一个函数的生命周期是从构造函数开始初始化后到析构函数销毁程序占用的资源。
构造函数:
用来为对象分配存空间,完成初始化操作。
特点:
1、构造函数的名称一定要的类名一样。
2、当类没有构造函数时系统会默认为其加上构造函数。
3、不用声明返回值类型,可以有参也可以没参数。
析构函数:
名称和构造函数一样,但是在名称前要加上一个波浪线(~)
特点:
没有修饰符、不能带参数会被自动调用。
重载:
是指调用同一种方法名,但是使用不同数据类型的参数或不同的次序或数量不同的也行。
可以实现代码的重用性。
条件:
1、方法名相同时。
2、方法的参数类型、个数、顺序到至少有一个不相同。
3、返回值可以不相同,但是只有类型不同是不可以的。
4、
修饰符可以不相同,但是只有修饰符不同是不可以的。
Main函数:
是程序的入口,且第一个程序只能有一个入口,。
分部类:
定义分部类的时候要用到partial关键字,分部类里第一个部分都必须包含一个partial关键字,并且其声明必须与其它部分位于同一个命名空
间下。
六、面向对象的特性
封装:
就是定义好个正确的类就是所谓的封装。
可以保证数据的安全性。
继承:
就是实现传递性,可以提高对象的重用性。
在C#中类的继承只支持单继承。
就是中允许继承一个类。
但是接口允许多继承。
且不能继承私有的。
继承后,派生类可以使用基类中的允许的数据了。
多态:
有四种方法可以实现多态:
1、重载
2、继承
3、重写注:
重写方法只能用于重写基类中的虚方法。
4、接口
注:
继承、虚方法、和重写方法组合在一起才能实现多态。
七、结构
结构是几个数据组成的数据结构,结构内存放一系列不同类型的变量。
结构格式:
修饰符合结构修饰符struct结构名
{}
结构是一种值类型,而类则是一种引用类型。
包括:
通常封装一组相关变量,可包括构造函数、常量、变量、字段、方法、属性等。
特点:
1、是值类型
2、结构实例化可不用new关键字
3、结构可以声明构造函数,但是必带参数。
4、结构可以实现接口。
5、不能初始化实例字段。
用处:
数据少时用,简便,如果成员多时则直接用类。
结构类的比较:
不同点:
1、结构是值类型,而类则是引用类型。
结构类型的变量包含此结构的数据,而不是像类类型那样包含对数据的引用。
2、结构使用堆栈分配,类使用堆的分配。
3、所有结构元素默认为public;类变量和常数默认为private(私有的)。
4、结构不能继承,而类则非常可以。
5、结构变量声明不能指定初始值设定项或数组的初始大小,而类变量声明则可以。
相同点:
1、都是属于容器类型的,可以包含其它的成员形式存在类型。
2、都具有成员,成员可包括构造函数、方法、属性、字段、常量、枚举、事件、和事件处理程序。
3、都可以实现接口。
八、接口
结构格式:
修饰符合interface接口名称:
继承的接口列表
{接口内容}
接口可以实现多重继承。
实现接口或类要与接口的定义严格一致。
而且可以继承多个接口。
要实现接口成员是公共的、实例的,并且与接口
成员具有相同的名称和签名。
¥¥类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器。
例子:
publicinterfacejiekou
{intMaa(intj,intk);//接口成员为(虚方法)}//接口是一个想法,而不是一个实体,最终的实现只能是类来实现。
下面是类的实现:
publicclassq:
jiekou
{
publicintMaa(intj,intk)
{returnj+k;}
}
调用:
staticvoidMain()
{jiekouc1=newq();//相当于jiekouc1=(jiekou)newq;将类的实例强制转换为接口对象,前面为虚的,后面是实的
Console.Write(c1.Maa(3,4));
}
还可以实现多个接口,而类继承后需要实现接口中的所有成员。
注:
接口只是一个想法,所以其成员一定要是虚的,不是具体实现。
抽象类和抽象方法
抽象类结构格式:
访问修饰符(public)关键字(abstract)class类名(mydata):
基类或接口
{//类成员}
例子:
publicabstractclassmyclass
{publicabstractvoidmethed();//抽象方法而不用肩括号的}
注:
抽象方法只能在抽象类中定义。
由一个抽象类转化为一个非抽象类时需要重写抽象方法用(override)方法
密封类与密封方法:
作用:
就是为了防止对继承的滥用,所以其它类不能从密封类中继承,但是它却可以继承另的基类。
语法格式:
访问修饰符sealedclass类名:
基类或接口
{//类成员}
由于其不可继承性,因此密封类不能声明为抽象的,即sealed不能与abstract修饰符同时使用。
密封方法的使用:
密封并重写基类中的虚方法时,用到了base.方法名();的语句,这是先调用基类中的方法。
比较接口与抽象类
1、抽象类可以包括字段、构造函数、析构函数、静态成员或常量等,但是接口中不可以。
九、枚举
枚举类型是一种特殊的值类型,它用于声明一组具有相同性质的常量,编写日期相关的应用程序时可以用到。
用enum来创建
enum类名
{}默认第一个枚举值为0
十、异常处理、错误类型、程序调试
一般用
try{}……catch{}语句
throw语句一般与上面的try{throw……}catch{}联用
结构图:
T委托:
声明一个委托,该委托拥有一个只有一个字符串类型的参数且没有返回值的方法
publicdelegatevoidDel(stringmessage);
//定义预委托的方法,该方法可以是静态的和实例的,只要预委托方法与委托具有相同的签//名即可
Publicv