图形图像程序设计知识要点总复习Word文档格式.docx
《图形图像程序设计知识要点总复习Word文档格式.docx》由会员分享,可在线阅读,更多相关《图形图像程序设计知识要点总复习Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
类型
范围
大小
sbyte
-128到127
有符号8位整数
byte
0到255
无符号8位整数
char
U+0000到U+ffff
16位Unicode字符
short
-32,768到32,767
有符号16位整数
ushort
0到65,535
无符号16位整数
int
-2,147,483,648到2,147,483,647
有符号32位整数
uint
0到4,294,967,295
无符号32位整数
long
-9,223,372,036,854,775,808到9,223,372,036,854,775,807
有符号64位整数
ulong
0到18,446,744,073,709,551,615
无符号64位整数
4、掌握基本的运算法则
请复习最基本的赋值、算术运算、关系运算、逻辑运算和位运算的运算法则,并搞清楚每种运算的优先级
如,
Intx=3,y=2,z=5,则表达式y+=z--/++x的值为3。
intx=10;
x+=x-=5;
则x的值为10。
inta=5,b=2;
intc=a/++b;
则c的值为1。
inta=7;
则经表达式a=a+++--a运算后,a的值为:
14
5、掌握数组的定义和使用
一维数组的定义和初始化:
(1)定义:
格式:
数据类型[]数组名;
数据类型可以是值类型也可以是引用型;
Int[]arr;
//定义了一个名为arr的整型数组
Decimal[]dArr;
//定义了一个名为dArr的实数型组
Arr[0]=1//错误,必须先初始化
(2)初始化
初始化分两种,一种静态初始化,一种是动态初始化.
如果数组元素不多,且初始元素值是已知的,可以采用静态初始化,
静态初始化必须与数组定义结合在一起,否则编译出错.
格式如下:
数据类型[]数组名={元素1,元素2,……,元素n}
Int[]a={32,45,67,65}//定义一有4个元素的整型数组a,同时给每个数组元素赋值
A[1]=45
A[4]=越界,//注意数组下标是从0开始
动态初始化:
首先使用new关键字将数组实例化为一个对象,再为该数组
对象分配内存空间。
接着需要为该数组中的每一个数组元素赋
初始值(一般是采用循环的方式来赋值).
intb[];
//定义数组b
B=newint[6];
//为数组b在内存中分配6*4=24个字节的存储空间,每个数组元
素被初始化为0
for(inti=0;
i<
6;
i++)-------for(inti=0;
b.Length;
i++)
B[i]=<
表达式>
对于循环终止的条件,即数组元素的个数,一般可以使用数组对象的一个属性Length来获取
也可以采用另外一些静态初始化的方式
int[]c=newint[]{1,3,5,7}
定义和初始化以及赋值放在一条语句来完成.
int[]c=newint[4]{1,3,5,7}正确
int[]c=newint[5]{1,3,5,7}错误
intn;
n=int.Parse(Cosole.ReadLine());
int[]a=newint[n];
可以
利用动态初始化动态修改数组的长度,如;
Intx=newint[5];
//定义一个具有五个元素的数组x
Intn=10;
X=newint[n];
//将重新分配内存,数组的长度变为10
6、类的及其成员定义
(1)OOP的基本特征是封装、继承和多态
(2)类定义了一个“模板”,通过这个“模板”可以生成一个或多个对象。
实例化就是由类创建对象的过程,一般使用new关键字来创建
(3)类中的静态(static)中的成员不属于任何对象,它可以通过类名直接访问,但实例成员必须通过建立对象的引用来访问,静态方法只能访问类中的静态成员,而实例方法可以访问类中的所有成员。
(4)构造函数是指函数名与类名相同,在实例化对象时被自动调用的特殊函数。
(5)当方法的参数前带有params关键字,这就是一个带数组型参数的方法。
在方法的参数列表中使用params关键字,可用于表示方法的形参个数不确定,这样就可以在使用方法的过程中改变传入方法的实参个数。
带有关键字params的数组型参数必须是方法的参数列表中最后一个参数,否则会出现编译错误。
数组型参数中的数组必须是一维数组类型,如int[],string[][](锯齿型数组),但int[,]二维数组则不能用来作为数组参数。
(6)类的属性有两种存取器,一个是Get,用来读,一个是Set,用来写
(7)类的索引器主要是使用对象名像数组名一样用下标来索引封装在类内部的数据成员
(8)运算符重载时要注意,如果重载关系运算符时,重载其中一个(如“==”),还必须重载另外一个,(如“!
=”)。
在重载运算符时,有两个修饰符public和static是必须的。
(9)通过this关键字,可以引用类的当前对象实例,通过base关键字,可以引用其基类(父类)对象
7、继承与多态
C#中的继承符合下列规则:
(1)继承是可传递的。
如果C从B中派生(C:
B),B又从A中派生(B:
A),那么C不仅继承了B中声明的成员,同样也继承了A中的成员。
Object类是所有类的基类,任何类总是直接或者间接从该类派生;
(2)派生类应当是对基类的扩展。
派生类可以添加新的成员,但不能除去已经继承的成员的定义。
(3)构造函数和析构函数不能被继承。
(4)派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。
但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
(5)类可以定义虚方法、虚属性以及虚索引指示器(用virtual关键字修饰),它的派生类能够重载这些成员(用override关键字修饰),从而实现类可以展示出多态性。
(6)派生类只能从一个类中继承,但可以继承实现多个接口。
(7)可以通过base关键字访问基类的成员,通过this访问当前类对象的成员;
(8)在一个派生类的对象被实例化之前,基类的构造函数必须首先被显式或隐式地调用,来完成在派生类对象中任何基类实例变量所需的初始化。
8、类的多态机制
(1)方法重载:
在同一个类中,存在多个方法名相同,参数列表不同,返回值可以相同,也可以不同的同名方法
(2)实现虚成员重载的C#语言编程架构是:
●先在基类中用Virtual修饰符定义虚成员。
虚成员可以是类的方法、属性和索引等,不能是域或私有变量。
定义虚成员与定义普通成员的格式是一样的,只是另加修饰符Virtual即可。
●在派生类中用Override修饰符重新定义与基类同名的覆盖成员,并根据需要重新定义基类中虚成员的代码,以满足不同类的对象的使用需求。
●在调用时,通过构造基类的引用变量,让其指向不同的子类对象,从而调用不同子类的成员
(3)abstract用来修饰抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化
抽象成员的定义:
●如果在一个类中,只要存在一个抽象成员,则这个类就必须声明为抽象类,抽象类是不能被实例化的
抽象类中抽象成员是不能够有具体实现代码的,如:
●抽象方法的定义:
publicabstract返回值类型方法名([形参列表]);
抽象方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。
●抽象属性的定义:
publicabstract返回值类型属性名
{
get;
set;
}
●抽象方法由它的继承子类去实现,其子类方法名前应该加上override去重载.
(4)密封类在声明中使用sealed修饰符,这样就可以防止该类被其它类继承,也即该类不能够再有派生类。
9、接口
接口(interface)用来定义一种程序的协定,实现接口的类或者结构要与接口的定义严格一致。
有了这个协定,就可以抛开编程语言的限制。
从技术上讲,接口是一组包含了函数型方法的数据结构。
通过这组数据结构,客户代码可以调用组件对象的功能。
因此接口成员与抽象成员一样,只是一个成员的型的定义,而不能提供任何实现代码。
接口中所有成员默认都是public级别的访问权限
接口与抽象类一样,也可以用来实现多态机制。
10、代理的使用
使用代理的一般步骤:
(1)定义一个代理
[修饰符]delegate返回值类型代理名([参数列表])
返回值类型必须与所要代理的方法的返回值保持一致,参数列表也要保持一致
(2)代理的实例化
所谓代理实例化,就是使用"
new"
关键字,将代理与某一个方法进行绑定,产生一个代理实例
(3)代理实例的调用
通过代理实例名来进行方法的匿名调用
补充:
在第二步中,在产生代理实例时,需要给定一个方法参数,或者给定另外一个代理实例,如果方法是一个静态方法,可以使用类名.方法名给出,如果是一个实例方法,则需要使用对象名.方法名给出.
代理的多播调用:
所谓代理的多播调用,是指把若干个代理实例组合在一起构成一个代理链表,通过代理链表上第一个代理实例的调用,将会调用代理链表上所有被代理的方法.
如何构建一个代理链表:
(1)首先创建代理链表中的第一个代理实例
(2)通过+=运算符,把其他代理实例添加到代理链表中来,也可以使用-=运算符,把某一个代理实例从代理链表中删除
(3)被添加到代理链表中的所有方法,必须是返回值为void,具有相同的参数列表,如果被代理的方法返回值不为void,则多播调用后的返回值为代理链表上最后一个方法的返回值
11、异常处理
(1)掌握异常处理的基本结构和发生异常后的程序流程
try{}catch(异常类型1e1){}catch(异常类型2e2){}catch(异常根类e)finally{最终执行的代码}
(2)在多个catch捕捉块中,必须保证异常子类在前,父类在后
(3)异常总是直接或者间接从异常基类Exception派生的
12、Windows编程
(1)编写Windows应用程序,必须引入的名称空间是:
System.Windows.Forms.
只要定义一个类继承于System.Windows.Forms命名空间下的窗体类(Form),然后在Main方法中通过Application.Run方法调用该窗体类的实例即可。
(2)Windows窗体的应用程序编程模型主要由窗体、控件及其事件组成。
(3)每个事件有两个支持类:
∙用于注册事件处理方法的EventHandler委托类。
EventHandler的签名指示事件处理方法的签名。
∙包含有关引发的事件的数据的EventArgs类。
13.泛型概述
泛型是.NET2.0以后新增加的一个语言点。
NETFramework泛型是在.NETFramework2.0的公共语言运行库(CLR)中的增加的一项新功能,类似于C++的模板,但不如C++的模板灵活,不过也有一些自己的特性。
泛型为.NETFramework引入了类型参数的概念,这样便可以设计出这样的类和方法:
它们把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候执行。
比如,通过泛型类型参数T,程序员就可以编写其它客户端代码能够使用的单个类,而不用担心强制转换或装箱操作而带来的额外的运行成本或风险。
在泛型类型定义中,类型参数实际上并不是特定类型,而只是类型占位符。
.NETFramework2.0版本库提供一个新的命名空间System.Collections.Generic,其中包含若干基于泛型的集合类。
如果需要限定该泛型类形参仅支持某些特定类型,则可以使用上下文关键字where定义泛型参数的约束。
14.多线程程序设计
使用Thread类创建和管理线程对象
●在.NET下,创建和管理多线程程序,主要使用封装在System.Threading名称空间下的类和接口,因此,一般先引用:
usingSystem.Threading;
●其中,Thread类是Threading名称空间下创建和管理线程对象最重要的一个类
●通过Thread类创建一个线程对象,如下所示:
usingSytem.Threading;
……
//
(1)先定义一个无返回值,无参数的线程方法
publicvoidThreadMethod(){……}
//
(2)再定义一个线程委托对象,注册一个线程方法
ThreadStartTDelegate;
TDelegate=newThreadStart(ThreadMethod);
//(3)创建一个Thread线程对象,将线程委托作为参数
Thread的构造方法需要一个参数,用于指定线程的入口—即线程开始执行的方法
ThreadNewThread=newThread(TDelegate);
//(4)启动线程对象
线程创建后,并未获得系统资源。
调用Start()方法启动线程,即给线程分配除处理器之外的系统资源并执行各种安全性检查。
NewThread.Start();
15、GDI绘图
1GDI+的概念
GDI+是GDI(GraphicsDeviceInterface,图形设备接口)的改进产品。
GDI+的绘图命名空间
用户所使有的GDI+函数都保存在System.Drawing.d11程序集中。
其中包括System.Drawing、System.Drawing.Text、System.Drawing.Printing、System.Drawing.Imaging、System.Drawing.Drawing2D和System.Drawing.Design等命名空间。
图形设计过程一般分为两步:
1.创建Graphics对象;
2.使用Graphics的方法绘图、显示文本或处理图像。
2、创建Graphics对象的方法:
(1)利用窗体或控件的Paint事件中PaintEventArgs建立图形对象的引用。
例如:
voidForm1_Paint(objectsender,PaintEventArgse)
{
Graphicsg=e.Graphics;
}
(2)利用窗体或某个控件的CreateGraphics方法建立Graphics对象的引用,所建对象是该控件或窗体的绘图区域。
Graphicsg=this.CreateGraphics();
(3)利用Graphics类的FromImage静态方法建立Graphics对象。
Imageimg=Image.FromFile(“g1.jpg”);
Graphicsg=Graphics.FromImage(img);
3、创建画笔
画笔用于绘制线条、勾勒形状轮廓或呈现其他几何表示形式。
用Pen类创建画笔对象。
画笔通常具有宽度、样式和颜色三种属性。
(1)创建画笔对象
Penpen1=newPen(Color.Green)
(2)画笔对象的属性
名称
说明
Color
设置画笔对象的颜色。
DashCap
设置用在点划线终点样式。
DashStyle
设置画笔绘制的虚线的线型。
EndCap
设置画笔绘制的直线终点的样式。
PenType
获取画笔绘制的直线的样式。
StartCap
设置画笔绘制的直线起点的样式。
Width
设置画笔的宽度。
4创建画刷
画刷用于填充图形内部。
用Brush类创建画刷。
常用的有下面几种画刷
(1)单色画刷(SolidBrush)
将某一特定区域填入单一的颜色。
SolidBrush类属于System.Drawing.Drawing2D名称空间。
构造函数:
SolidBrush(Color.Color);
SolidBrushbh1=newSolidBrush(Color.Red)
(2)阴影画刷(HatchBrush)
阴影画刷有两种颜色:
前景色和背景色,有6种阴影。
前景色定义线条的颜色;
背景色定义各线条之间间隙的颜色。
HatchBrush类在System.Drawing.Drawing2D名称空间。
HatchBrush(HatchStyle,Colorforecolor);
HatchBrush(HatchStyle,Colorforecolor,Colorbackcolor);
HatchBrushbb1=newHatchBrush(HatchStyle.Cross,Color.Red);
建立一个前景色为红色、样式为十字交叉的画刷。
(3)渐变画刷(GradientBrush)
用于在某一个特定的区域内产生渐变效果。
常见的渐变效果是由两个颜色逐渐变化而来的。
LinearGradientBrush
显示线性渐变效果。
构造函数:
LinearGradientBrush(Pointpoint1,Pointpoint2,Colorcolor1,Colorcolor2);
参数意义为:
point1:
线性渐变起始点的Point结构。
point2:
线性渐变终结点的Point结构。
color1:
线性渐变起始色的Color结构。
color2:
线性渐变结束色的Color结构。
16、文件操作与I/O流
(1)文件是指在各种存储介质上永久存储的数据的集合,它是进行数据读写操作的基本对象。
流是字节序列的抽象概念。
一般来说,对流的操作有三类,如下:
1)读取2)写入3)定位
(2)掌握与文件和流操作相关的类及其继承关系(不做考察)
17、ADO.NET对象
(1).NETFramework数据提供程序:
●SQLServer.NET数据提供程序,封装在System.Data.SqlClient命名空间下
●OLEDB.NET数据提供程序,封装在System.Data.OleDb命名空间下
.NET数据提供程序提供了四个核心对象,分别是Connection、Command、DataReader和DataAdapter对象。
(2).NET访问数据库的一般步骤
●根据使用的数据源,确定使用的.NETFramework数据提供程序;
●建立与数据源的连接,需使用Connection对象;
●执行对数据源的操作命令,通常是SQL命令,需使用Command对象;
●使用数据集对获得的数据进行操作,需使用DataReader、DataSet等对象;
●向用户显示数据,需使用数据控件。
(3)示例程序
stringsqlStr="
DataSource=(local);
IntegratedSecurity=SSPI;
InitialCatalog=MyStudentDB"
;
//通过连接字符串实例化连接对象
SqlConnectionmyCon=newSqlConnection(sqlStr);
//打开数据库连接
myCon.Open();
//通过指定的Sql命令,创建一个SqlDataAdapter对象
SqlDataAdaptersda=newSqlDataAdapter("
Sele