c#结构

在向大家详细介绍C#结构实例之前,首先让大家了解下类与结构有很多相似之处,然后全面介绍C#结构实例。

类与结构有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。

例如,将 Point 定义为结构而不是类在运行时可以节省很多内存空间。下面的程序创建并初始化一个 100 点的数组。对于作为类实现的 Point,出现了 101 个实例对象,因为数组需要一个,它的 100 个元素每个都需要一个。

  1. class Point  
  2. {  
  3.    public int x, y;  
  4.    public Point(int x, int y) {  
  5.       this.x = x;  
  6.       this.y = y;  
  7.    }  
  8. }  
  9. class Test  
  10. {  
  11.    static void Main() {  
  12.       Point[] points = new Point[100];  
  13.       for (int i = 0; i < 100; i++)  
  14.          points[i] = new Point(i, i*i);  
  15.    }  

如果将 Point 改为作为C#结构实现,如

  1. struct Point  
  2. {  
  3.    public int x, y;  
  4.    public Point(int x, int y) {  
  5.       this.x = x;  
  6.       this.y = y;  
  7.    }  

则只出现一个实例对象(用于数组的对象)。Point 实例在数组中内联分配。此优化可能会被误用。使用结构而不是类还会使应用程序运行得更慢或占用更多的内存,因为将C#结构实例作为值参数传递会导致创建结构的副本。
实例二:

public struct CoOrds { public int x, y; public CoOrds(int p1, int p2) { x = p1; y = p2; } } class TestCoOrds { static void Main() { // Initialize: CoOrds coords1 = new CoOrds(); CoOrds coords2 = new CoOrds(10, 10); // Display results: System.Console.Write("CoOrds 1: "); System.Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y); System.Console.Write("CoOrds 2: "); System.Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y); } } 输出 -------------------------------------------------------------------------------- CoOrds 1: x = 0, y = 0 CoOrds 2: x = 10, y = 10


posted on 2012-03-07 11:29 青蛙學堂 阅读(233) 评论(1)  编辑 收藏 引用 所属分类: 軟件布袋

评论

# re: c#结构 2012-03-07 11:35 传多个值

struct 类型适于表示 Point、Rectangle 和 Color 等轻量对象。尽管可以将一个点表示为类,但在某些情况下,使用结构更有效。例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。由于 .NET Framework 包含名为 Point 的对象,因此我们转而调用结构“CoOrds”。

public struct CoOrds
{
public int x, y;

public CoOrds(int p1, int p2)
{
x = p1;
y = p2;
}
}

声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。

如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用 new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。

对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。

与 C++ 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。有关更多信息,请参见值类型。

除非需要引用类型语义,否则系统将较小的类作为结构处理效率会更高。  回复  更多评论   

只有注册用户登录后才能发表评论。
<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜