类和结构的相似之处有很多-结构可以实现接口,并且可以有同类一样的成员。结构和类在很多重要的方面也不相同,无论如何:结构是数值类型而不是引用类型,而且结构不支持继承。结构的数值或是存储“在堆栈中”或是“在线”。仔细的程序员可以通过明智地使用结构来提高性能。
例如,对Point使用结构而不是类,会在成员的存储位置上造成很大不同。下面的程序创建并初始化了一个100个单元的数组。如果Point用类实现,程序就会占用101个分立对象,一个分给数组另外100个分给每个元素。
class Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
class Test
{
static void Main()
{
Point[] points = new Point[100];
for (int i = 0; i < 100; i++)
points[i] = new Point(i, i*i);
}
}
如果Point用结构来代替,
struct Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
这样测试程序只会占用一个对象,代表的数组。Point实例在数组内在线分配。这种优化可能会被错误使用。由于当作为数值参数传输一个结构实例时会造成要创建结构,因此用结构替代类也许会使程序变得缓慢和庞大。小心的数据结构和算法设计是无可替代的。
好费解的一段话。理解后,大概的意思是:结构与类有区别也有相似,建立数组时结构的性能还是比类好的,但如果做为参数传递时,结构的性能没有类好。