结构类型

1 结构

结构存放在栈中按值传递,与存放在堆中对象相比,结构具有性能上的优势。但把结构当作一个参数传递给方法就不见得了,因为传递前它会复制它的一个副本,和引用 类型相比,结构越复杂,复制的开销就越大。因此结构应该用来表示小的数据结构。

 

结构与类的另一人差别是,结构不能定义无参数的构造函数,也不能定义析构函数。无参的构造函数是运行时提供的,用来将所有的数据成员初始化。而结构定义的构造函数必须为构造函数包含的每个字段赋值。

结构不支持实现继承,可以提供一个或多个接口的实现。

 

定义结构

 

<access_modifer> struct<struct_name>

 {

 // Data Members

 // Methods

//nested type definitions

 }

创建结构的实例与类相同

 

2 winform中常用结构

2.1 二维坐标点

存在一种"坐标点“数据类型,它在图形环境中非常流行,并且可以调整到足够小使之成为结构而不是类。在.NET Framework 中它是用Ponit结构表示。在二维坐标系中,一个点由用一对数值来表示(x,y),其中x是水平坐标,y是垂直坐标。

point有两可以读写属性,分别叫做x,y,是一个32位整数。例如我们实例化一个Point

Point pt=new Point(100,15)

Point还有一个静态字段:Point Pt=Pointt.Empety ;该语句使x,y都为0;

Point还有个名为”IsEmpty“的只读属性,如果x,y的值都为0,则返回true;

Point从Oject继承了GetType方法通过ValueType的方式覆盖了Object中的GetHashCode()、ToString、和Equals方法,还独立实现了一个名为”Offset“的方法

 

Point实例的方法

Type GetType()

int GetHashCode()

string ToString()

bool Equales(Point point)

void Offset(int dx,int dy)


Point pt=new Point(12,15);

string str=pt.Tostring();  //{x=12,y=15}

测试一个坐标点是否等于另一个坐标点 if(pt1.Equals(pt2))或if(pt1==pt2)

Offset方法:

  pt.Offset(10,-10);

与向属性添加两个偏移量的方法基本相同

pt.x+=10;

pt.y+=-10;

 

2.2 Point 数组

要想创建一个Point数组(假设包含30个点),可以像这样创建

Point[] Pt=new Point[30];

 

3 size 结构

Size结构与Point结构非常相似,但它使用Width和Height属性.

可以像创建一个Point结构一样创建一个Size结构

Size size=new Size(100,200);

Height和Width的值可以负值。Point和Size可以相互构造

Point的构造函数

Point()

Point(int xyPacked)

Point(int x,int y)

Point(Size size)

Size的构造函数

Size()

Size(int width,int height)

Size(Point point)

 

你可以将Point强制转换为Size,相反也可以将Size转换为Point

pt=(Point)size;

size=(Size)pt;

 

Size重构了加减法运算符,你可以对Size做加减法运算

 

它们的浮点版本PointF结构和SizeF结构

PointF ptf=new PointF(12.5f,15.8f)

SizeF sf=new SizeF(11.1f,11.5f)

PointF不包含Offset方法。可以将Point强制转换成PointF

ptf=(PointF)pt;//反之则不行

如果想将PointF转换成Point,需要使用Point的一些静态方法

Point.Round(PointF ptf) //将x,y四舍五入为最近的整数

Point.Truncate(PointF ptf)// 舍去小数部分并且朝0的方向舍弃 0.9和-0.9 者是0

Point.Celling(Point ptf)//向下一个最大整数转换 0.9为1而-0.9为0

 

Size的转换同上

不能从PointF到SizeF的转换。

 

 

posted @ 2010-06-12 10:31  mozer  阅读(315)  评论(0编辑  收藏  举报