C# 的总复习
前言:
编程语言的进化
1、计算机语言: 用的是指令直接来对电脑进行操作,速度最快,不过只是识别10100的语言,不容易被大多数人掌握。
2、汇编语言: 用汇编语言可以更简单地编写计算机语言。主要是借助一些 易于记住的命令编写的。简洁,但是不容易学,运行时间短。一般大多数厉害的 黑客都会攻这方面的技术。
ASCⅡ码是用来制订计算机中每个对应的代码,这也叫做计算机的内码(CODE)
:每个ASCⅡ码用一个字节来存储.代码 0 代表NULL字符 代码65 代表A 代码97代 表a 代码 48代表0
3、高级语言: 分为面向对象、面向过程、函数式的等
面向过程 的代表是C语言。就是按照一定的过程来写的程序,应用于早期,现 在不常用,代码短执行快,易于理解与应用,因为其代码多,不易修改等弊端
面向对象(适合复杂的程序 C++ JAVA C# 是函数式的一个发展,中的“类 ”定义了对象必须有的属性。
“对象”在就是类中的一个组成成员。“方法 ”就是对对象中的数据执行某个程序。
C#概述:
C#是一种源于C语言 C++的高级编程语言。是一种简单、功能强大、表达力丰富的全新语言。集成于微软的.NET Farmework中,其核心原素之一是公共语言运行(common language runtime,CLR) ,后翻译成Microsoft中间语言(MSIL,简称IL),转化成本机代码。
一、语句、标示符、关键字
1、语句: 是程序的基本组成部分,程序就是各个语句一起组成的
c#的语句包括条件语句、循环语句、赋值语句、和执行任务语句等。
2、标示符的命名规则: 由数字、字母、下划线组成,首字母不能是数字,如果是关键字则在前面加上个@。
3、关键字: Abstract As Base Bool Fool True Break Byte Case Catch Char Float int double
decimal string goto const return out continue if else long short void while public 等
4、数据类型 : 变量与常量
变量:在程序随时变的值,程序中数据暂时存放的场所。使用第一步声明规则变量的类型与名字。二步、赋值也叫初始化。(可以两步也可以一步)
例如:int a=1;也可以是int a;a=1;
常量: 在前加一个const 关键字其它的和变量一样。
(注:必须在声明时初始化。总是静态的,易于避免错误,易于修改。)
数据类型分为值类型、引用类型
值类型包括:整型、浮点类型、字符类型、和布尔类型
整型:int sbyte short long
浮点类型:float(赋值时数字后要加上F) double decimal(赋值时数字后也要加上M)(更高精度的浮点数)
字符类型:char
有需要转义的 \'单引号 \" 双引号\\反斜杠 \0空 \a 警告\b退格 \f换页 \n换行 \t水平退格 \v垂直\r回车
布尔类型bool:true false
引用类型:(保留有堆上)
object类型 string类型:为字符串
类型的转化:
隐式转换是由精度大的转换成精度小的
显式转换(强制性类型转换) int c; c=(int)3.22; 会引起信息丢失。
ToString()是将变量转换成字符串类型的方法。例子:Convert.ToString()就是转换成字符串,还可以用Int.Parse();
注:如果是转换float则用ToSingle
隐形局部变量:不用声明类型
前加一个关键字 var 例如:var name="张三";
ReadLine() Read() WriteLine() Write()等方法
5、拆箱与装箱:
拆箱是把值类型转换成一个object引用类型,放在堆上 int i=10; object obj=i;int j=(int)obj; 装箱是把object引用类型转换成一个值类型 int i=10; object obj=i;
6、运算符和表达式
表达式是由变量、常量、和运算符(+ - * / 等)组成
三种运算符:
一元运算符:作用于一个运算数。x++(先使用后增加) ;++x(先增加后使用) ; x--; --x ; 二元运算符:作用于二个运算数。z=x+y;
三元运算符:只有一个"?:"作用于三个运算符y=a
算术运算符:+ - * / %(b)
复合赋值: x+=y; //x=x+y x-=y; //x=x-y „„
关系运算符:== 等于 ,!= 不等于, 等大于, =大于或等于
逻辑运算符:&&逻辑与 ||逻辑或 !逻辑非
运算符的优先级别
()的>一元运算符(++a ,a++ ,逻辑运算符)>算术运算符(*,/,%,》+ -)>关系运算符() (书上69页)
二、结构化程序(顺序结构、选择结构、循环结构)
程序设计的步骤:
1、分析问题。分析用户需要,给定哪些数据,需要输出什么数据,哪些处理,需要用哪些硬件、软件,分析运行环境。
2、确定算法确定最合适的处理方案。用数学形式表达出来
3、画流程图
4、编写程序
5、调试程序
6、建立健全的文档资料
1、顺序:由上而下进行的程序
结构图:Console.WriteLine("还不错哟");
Console.Write("这是好的?");
2、选择:
if-else:
结构图:
if(a>b)//括号内的是条件
{console.write("这是对的");}
else{console.write("不对了");}
switch:
结构图:
switch(表达式)
{case 常量表达式1: 要执行的语句1 break;
case 常量表达式2: 要执行的语句1 break;
case 常量表达式3: 要执行的语句1 break;//跳出
default: 其余情况的条件 break;
}
三元运算符:
console.write(dout1
3、循环:
分为for foreach while do-while三大循环是重点
结构图:
for①
for(条件) 判断条件后执行
{执行体}
经典例子:for(int i=0;i
{Console.Write("{0}",Convert.ToChar(i));
}
while②
while(条件) 先判断后执行
{执行体}
do-while③
do{执行体}
while(条件) 先执行后判断
跳转语句:
Break 立即终止循环的
Continue立即终止当前的循环(执行下一循环)
Goto 无条件跳转,可以跳出循环并跳转到标记了的代码位置上。//exc:定义一个标记 用方式goto exc;
Return 跳出循环以及方法
三、数组:就是一组具有相同类型和名称的变量的有序集合。
结构图:
静态初始化:int[]mydate={6,7,8};
动态初始化:int[]mydate=new int[3]; 数据类型[]数组名称=new 数据类型[数组长度]; 经典初始化40个学生的成绩:
for (int i=0;i
{str[i]=Convert.ToSingle(Console.ReadLine());
}
注:每个数组中的元素的下标从0开始。没有赋值情况下使用如果数据类型为整型或浮点型,其默认值为0;如果数据类型为布尔类型时,默认值为false;当数据类型为字符类型时,默认值为空(null).
1、数组的清空:
结构图:
Array.Clear(mydate,3,6);//调用基类中的清空方法,3是清空元素起始下标,6是清空元素的个数。
2、数组的查找:
int data=Array.IndexOf(mydate,17);//调用IndexOF()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data(为索引其下标).
int data=Array.LastIndexOf(mydate,17);//调用LastIndexOf()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data.
排序的几种:
Array.Sort(mydata);//调用正向排序(即是由小到大的排序),mydata 这是数组名称
Array.Reverse(mydata);//调用反向排序(即是由大到小的排序),mydata 这是数组名称
著名的冒泡排序:
思想:相邻的元素进行比较,若前面的大于后面的就交换。
int[]a=new int[5]={2,4,6,8,1};
int j,t;
j=1;
bool done=false;
while(j
{
done=true;
for(int i=0;i=a.Length-j;i++)
{done=true;
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}
j++
}//这就是排序的完毕了
选择排序算法:
思想:找最小的一个放在第一个位置上,而后则直接挨着放。
int[] a = new int[5] { 6,4,9,2,7};
int min;
for (int i = 0; i
{
min = i;
for (int j = i + 1; j
{
if (a[j]
{
min =j ;
}
}
int t = a[min];
a[min] = a[i];
a[i] = t;
}
foreach (int i in a)
{
Console.Write("{0} ",i);
}
插入排序:
思想:有顺序地将排序的元素插入已经排好顺序的元素里。
四、面向对象(OOP)
思想:将数据及处理这些数据的操作都封装到一个称为类的(class)的数据结构中,使用这个类时只需要定义一个变量就行了。
结构图:
现实世界 计算机语言
事物状态 属性
行为 方法(函数)
类:
就是包括了两个部分:属性与方法
定义:具有相同属性和服务的一组对象的集合。
声明类(类和变量一样也是一种数据类型)用的关键字是class
(修饰符) (关键字) (类名) (继承方式)(基类名)
{类成员(变量、常量、方法、属性、事件、索引器、定义);}
修饰符有public 公众的 任何类都可以后访问 private 私有的(默认的) 类和方法只对 本类里面的方法可见
protected 受保护的 本类可以访问和继承本类的子类可以访问 internal 内部的 就是 在同一命名空间下可以访问
protected internal 继承的子类可以继承
如果是静态的则直接的用类名加上个成员即可
是实例的则用初始化一个对象,用对象名加上个成员名。
对象:
就是将算法与数据结构看做一个整体的, 算法就是解决问题的方法,数据结构就是 事物中各个属性之间的联系和组织形式。
对象的声明与访问:属性与字段
属性与字段对比:
相同点:都可以输入信息,可以给对象指定一个状态,来把对象的信息给描述出来。 不同点:
属性:不能直接访问数据,就是该对象的状态,还能保证数据安全。
字段:类一级的成员包括一些定义、常量、变量
方法:就是对象的函数,可以处理一些问题,解决方法等。
对象=算法+数据结构
程序=对象+对象„„+对象
五、属性
属性:
只写一个例子吧
private int age;
public int Age
{
get {return age;//拿出去}如果只有它则是只读的
set {age=value;//放进去}如果只有它而没有上个则它是只写的
}
方法:
方法是一种用于实现可以由对象或类执行的计算或操作的成员.就是动作的实现,而属性则只是状态.
格式为:
访问级别(访问修饰符) 返回类型 方法名称 (参数列表)
{方法体}
返回类型包括:void(无返回值) int string double 等
方法在定义的时候,小括号里的参数为形式参数,而实参数为调用时主方法里的参数。
包括有四种:
1、无参无返回值
调用则是:p.add();
2、无参有返回值
Console.WriteLine(p.add());
3、有参无返回值
p.add(8);
4、有参有返回值
需要实例化后格式
Program p=new Program();
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 接口名称:继承的接口列表
{接口内容}
接口可以实现多重继承。实现接口或类要与接口的定义严格一致。而且可以继承多个接口。要实现接口成员是公共的、实例的,并且与接口
成员具有相同的名称和签名。¥¥类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器。
例子:
public interface jiekou
{int Maa(int j,int k);//接口成员为(虚方法)}//接口是一个想法,而不是一个实体,最终的实现只能是类来实现。 下面是类的实现:
public class q:jiekou
{
public int Maa(int j,int k)
{ return j+k; }
}
调用:static void Main()
{jiekou c1=new q();//相当于jiekou c1=(jiekou)new q;将类的实例强制转换为接口对象,前面为虚的,后面是实的
Console.Write(c1.Maa(3,4));
}
还可以实现多个接口,而类继承后需要实现接口中的所有成员。
注:接口只是一个想法,所以其成员一定要是虚的,不是具体实现。
抽象类和抽象方法
抽象类结构格式:
访问修饰符(public) 关键字 (abstract) class 类名(mydata):基类或接口
{//类成员}
例子:public abstract class myclass
{public abstract void methed();//抽象方法而不用肩括号的}
注:抽象方法只能在抽象类中定义。由一个抽象类转化为一个非抽象类时需要重写抽象方法用(override)方法
密封类与密封方法:
作用:就是为了防止对继承的滥用,所以其它类不能从密封类中继承,但是它却可以继承另的基类。
语法格式:
访问修饰符 sealed class 类名:基类或接口
{//类成员}
由于其不可继承性,因此密封类不能声明为抽象的,即sealed不能与abstract修饰符同时使用。
密封方法的使用:密封并重写基类中的虚方法时,用到了base.方法名(); 的语句,这是先调用基类中的方法。
比较接口与抽象类
1、抽象类可以包括字段、构造函数、析构函数、静态成员或常量等,但是接口中不可以。
九、枚举
枚举类型是一种特殊的值类型,它用于声明一组具有相同性质的常量,编写日期相关的应用程序时可以用到。
用enum来创建
enum 类名
{}默认第一个枚举值为0
结构图:
十、异常处理、错误类型、程序调试
一般用
try{}„„catch{}语句
throw语句一般与上面的try{throw „„ } catch{}联用
结构图:
C# 的总复习
前言:
编程语言的进化
1、计算机语言: 用的是指令直接来对电脑进行操作,速度最快,不过只是识别10100的语言,不容易被大多数人掌握。
2、汇编语言: 用汇编语言可以更简单地编写计算机语言。主要是借助一些 易于记住的命令编写的。简洁,但是不容易学,运行时间短。一般大多数厉害的 黑客都会攻这方面的技术。
ASCⅡ码是用来制订计算机中每个对应的代码,这也叫做计算机的内码(CODE)
:每个ASCⅡ码用一个字节来存储.代码 0 代表NULL字符 代码65 代表A 代码97代 表a 代码 48代表0
3、高级语言: 分为面向对象、面向过程、函数式的等
面向过程 的代表是C语言。就是按照一定的过程来写的程序,应用于早期,现 在不常用,代码短执行快,易于理解与应用,因为其代码多,不易修改等弊端
面向对象(适合复杂的程序 C++ JAVA C# 是函数式的一个发展,中的“类 ”定义了对象必须有的属性。
“对象”在就是类中的一个组成成员。“方法 ”就是对对象中的数据执行某个程序。
C#概述:
C#是一种源于C语言 C++的高级编程语言。是一种简单、功能强大、表达力丰富的全新语言。集成于微软的.NET Farmework中,其核心原素之一是公共语言运行(common language runtime,CLR) ,后翻译成Microsoft中间语言(MSIL,简称IL),转化成本机代码。
一、语句、标示符、关键字
1、语句: 是程序的基本组成部分,程序就是各个语句一起组成的
c#的语句包括条件语句、循环语句、赋值语句、和执行任务语句等。
2、标示符的命名规则: 由数字、字母、下划线组成,首字母不能是数字,如果是关键字则在前面加上个@。
3、关键字: Abstract As Base Bool Fool True Break Byte Case Catch Char Float int double
decimal string goto const return out continue if else long short void while public 等
4、数据类型 : 变量与常量
变量:在程序随时变的值,程序中数据暂时存放的场所。使用第一步声明规则变量的类型与名字。二步、赋值也叫初始化。(可以两步也可以一步)
例如:int a=1;也可以是int a;a=1;
常量: 在前加一个const 关键字其它的和变量一样。
(注:必须在声明时初始化。总是静态的,易于避免错误,易于修改。)
数据类型分为值类型、引用类型
值类型包括:整型、浮点类型、字符类型、和布尔类型
整型:int sbyte short long
浮点类型:float(赋值时数字后要加上F) double decimal(赋值时数字后也要加上M)(更高精度的浮点数)
字符类型:char
有需要转义的 \'单引号 \" 双引号\\反斜杠 \0空 \a 警告\b退格 \f换页 \n换行 \t水平退格 \v垂直\r回车
布尔类型bool:true false
引用类型:(保留有堆上)
object类型 string类型:为字符串
类型的转化:
隐式转换是由精度大的转换成精度小的
显式转换(强制性类型转换) int c; c=(int)3.22; 会引起信息丢失。
ToString()是将变量转换成字符串类型的方法。例子:Convert.ToString()就是转换成字符串,还可以用Int.Parse();
注:如果是转换float则用ToSingle
隐形局部变量:不用声明类型
前加一个关键字 var 例如:var name="张三";
ReadLine() Read() WriteLine() Write()等方法
5、拆箱与装箱:
拆箱是把值类型转换成一个object引用类型,放在堆上 int i=10; object obj=i;int j=(int)obj; 装箱是把object引用类型转换成一个值类型 int i=10; object obj=i;
6、运算符和表达式
表达式是由变量、常量、和运算符(+ - * / 等)组成
三种运算符:
一元运算符:作用于一个运算数。x++(先使用后增加) ;++x(先增加后使用) ; x--; --x ; 二元运算符:作用于二个运算数。z=x+y;
三元运算符:只有一个"?:"作用于三个运算符y=a
算术运算符:+ - * / %(b)
复合赋值: x+=y; //x=x+y x-=y; //x=x-y „„
关系运算符:== 等于 ,!= 不等于, 等大于, =大于或等于
逻辑运算符:&&逻辑与 ||逻辑或 !逻辑非
运算符的优先级别
()的>一元运算符(++a ,a++ ,逻辑运算符)>算术运算符(*,/,%,》+ -)>关系运算符() (书上69页)
二、结构化程序(顺序结构、选择结构、循环结构)
程序设计的步骤:
1、分析问题。分析用户需要,给定哪些数据,需要输出什么数据,哪些处理,需要用哪些硬件、软件,分析运行环境。
2、确定算法确定最合适的处理方案。用数学形式表达出来
3、画流程图
4、编写程序
5、调试程序
6、建立健全的文档资料
1、顺序:由上而下进行的程序
结构图:Console.WriteLine("还不错哟");
Console.Write("这是好的?");
2、选择:
if-else:
结构图:
if(a>b)//括号内的是条件
{console.write("这是对的");}
else{console.write("不对了");}
switch:
结构图:
switch(表达式)
{case 常量表达式1: 要执行的语句1 break;
case 常量表达式2: 要执行的语句1 break;
case 常量表达式3: 要执行的语句1 break;//跳出
default: 其余情况的条件 break;
}
三元运算符:
console.write(dout1
3、循环:
分为for foreach while do-while三大循环是重点
结构图:
for①
for(条件) 判断条件后执行
{执行体}
经典例子:for(int i=0;i
{Console.Write("{0}",Convert.ToChar(i));
}
while②
while(条件) 先判断后执行
{执行体}
do-while③
do{执行体}
while(条件) 先执行后判断
跳转语句:
Break 立即终止循环的
Continue立即终止当前的循环(执行下一循环)
Goto 无条件跳转,可以跳出循环并跳转到标记了的代码位置上。//exc:定义一个标记 用方式goto exc;
Return 跳出循环以及方法
三、数组:就是一组具有相同类型和名称的变量的有序集合。
结构图:
静态初始化:int[]mydate={6,7,8};
动态初始化:int[]mydate=new int[3]; 数据类型[]数组名称=new 数据类型[数组长度]; 经典初始化40个学生的成绩:
for (int i=0;i
{str[i]=Convert.ToSingle(Console.ReadLine());
}
注:每个数组中的元素的下标从0开始。没有赋值情况下使用如果数据类型为整型或浮点型,其默认值为0;如果数据类型为布尔类型时,默认值为false;当数据类型为字符类型时,默认值为空(null).
1、数组的清空:
结构图:
Array.Clear(mydate,3,6);//调用基类中的清空方法,3是清空元素起始下标,6是清空元素的个数。
2、数组的查找:
int data=Array.IndexOf(mydate,17);//调用IndexOF()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data(为索引其下标).
int data=Array.LastIndexOf(mydate,17);//调用LastIndexOf()方法,需要指定查找的数组以及要查找的值,并将找得到的值赋给变量data.
排序的几种:
Array.Sort(mydata);//调用正向排序(即是由小到大的排序),mydata 这是数组名称
Array.Reverse(mydata);//调用反向排序(即是由大到小的排序),mydata 这是数组名称
著名的冒泡排序:
思想:相邻的元素进行比较,若前面的大于后面的就交换。
int[]a=new int[5]={2,4,6,8,1};
int j,t;
j=1;
bool done=false;
while(j
{
done=true;
for(int i=0;i=a.Length-j;i++)
{done=true;
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}
j++
}//这就是排序的完毕了
选择排序算法:
思想:找最小的一个放在第一个位置上,而后则直接挨着放。
int[] a = new int[5] { 6,4,9,2,7};
int min;
for (int i = 0; i
{
min = i;
for (int j = i + 1; j
{
if (a[j]
{
min =j ;
}
}
int t = a[min];
a[min] = a[i];
a[i] = t;
}
foreach (int i in a)
{
Console.Write("{0} ",i);
}
插入排序:
思想:有顺序地将排序的元素插入已经排好顺序的元素里。
四、面向对象(OOP)
思想:将数据及处理这些数据的操作都封装到一个称为类的(class)的数据结构中,使用这个类时只需要定义一个变量就行了。
结构图:
现实世界 计算机语言
事物状态 属性
行为 方法(函数)
类:
就是包括了两个部分:属性与方法
定义:具有相同属性和服务的一组对象的集合。
声明类(类和变量一样也是一种数据类型)用的关键字是class
(修饰符) (关键字) (类名) (继承方式)(基类名)
{类成员(变量、常量、方法、属性、事件、索引器、定义);}
修饰符有public 公众的 任何类都可以后访问 private 私有的(默认的) 类和方法只对 本类里面的方法可见
protected 受保护的 本类可以访问和继承本类的子类可以访问 internal 内部的 就是 在同一命名空间下可以访问
protected internal 继承的子类可以继承
如果是静态的则直接的用类名加上个成员即可
是实例的则用初始化一个对象,用对象名加上个成员名。
对象:
就是将算法与数据结构看做一个整体的, 算法就是解决问题的方法,数据结构就是 事物中各个属性之间的联系和组织形式。
对象的声明与访问:属性与字段
属性与字段对比:
相同点:都可以输入信息,可以给对象指定一个状态,来把对象的信息给描述出来。 不同点:
属性:不能直接访问数据,就是该对象的状态,还能保证数据安全。
字段:类一级的成员包括一些定义、常量、变量
方法:就是对象的函数,可以处理一些问题,解决方法等。
对象=算法+数据结构
程序=对象+对象„„+对象
五、属性
属性:
只写一个例子吧
private int age;
public int Age
{
get {return age;//拿出去}如果只有它则是只读的
set {age=value;//放进去}如果只有它而没有上个则它是只写的
}
方法:
方法是一种用于实现可以由对象或类执行的计算或操作的成员.就是动作的实现,而属性则只是状态.
格式为:
访问级别(访问修饰符) 返回类型 方法名称 (参数列表)
{方法体}
返回类型包括:void(无返回值) int string double 等
方法在定义的时候,小括号里的参数为形式参数,而实参数为调用时主方法里的参数。
包括有四种:
1、无参无返回值
调用则是:p.add();
2、无参有返回值
Console.WriteLine(p.add());
3、有参无返回值
p.add(8);
4、有参有返回值
需要实例化后格式
Program p=new Program();
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 接口名称:继承的接口列表
{接口内容}
接口可以实现多重继承。实现接口或类要与接口的定义严格一致。而且可以继承多个接口。要实现接口成员是公共的、实例的,并且与接口
成员具有相同的名称和签名。¥¥类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器。
例子:
public interface jiekou
{int Maa(int j,int k);//接口成员为(虚方法)}//接口是一个想法,而不是一个实体,最终的实现只能是类来实现。 下面是类的实现:
public class q:jiekou
{
public int Maa(int j,int k)
{ return j+k; }
}
调用:static void Main()
{jiekou c1=new q();//相当于jiekou c1=(jiekou)new q;将类的实例强制转换为接口对象,前面为虚的,后面是实的
Console.Write(c1.Maa(3,4));
}
还可以实现多个接口,而类继承后需要实现接口中的所有成员。
注:接口只是一个想法,所以其成员一定要是虚的,不是具体实现。
抽象类和抽象方法
抽象类结构格式:
访问修饰符(public) 关键字 (abstract) class 类名(mydata):基类或接口
{//类成员}
例子:public abstract class myclass
{public abstract void methed();//抽象方法而不用肩括号的}
注:抽象方法只能在抽象类中定义。由一个抽象类转化为一个非抽象类时需要重写抽象方法用(override)方法
密封类与密封方法:
作用:就是为了防止对继承的滥用,所以其它类不能从密封类中继承,但是它却可以继承另的基类。
语法格式:
访问修饰符 sealed class 类名:基类或接口
{//类成员}
由于其不可继承性,因此密封类不能声明为抽象的,即sealed不能与abstract修饰符同时使用。
密封方法的使用:密封并重写基类中的虚方法时,用到了base.方法名(); 的语句,这是先调用基类中的方法。
比较接口与抽象类
1、抽象类可以包括字段、构造函数、析构函数、静态成员或常量等,但是接口中不可以。
九、枚举
枚举类型是一种特殊的值类型,它用于声明一组具有相同性质的常量,编写日期相关的应用程序时可以用到。
用enum来创建
enum 类名
{}默认第一个枚举值为0
结构图:
十、异常处理、错误类型、程序调试
一般用
try{}„„catch{}语句
throw语句一般与上面的try{throw „„ } catch{}联用
结构图: