根据C# programming reference给出来信息,Struct实质上还是用来实现轻量级别的类派用处的,这就意味着它还是可以有属性,方法(函数)以及标签等,唯一的区别在于,Struct在编程的时候不能由程序员申明构造函数,即使是默认(不带参数)的构造函数,同样也不能有析构的处理部分。这是因为Struct的构造函数是由编译器自动生成的。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。
先举出微软提供的例子
// Copyright (C) 2000 Microsoft Corporation. All rights reserved. // struct2.cs using System; class TheClass { public int x;} struct TheStruct { public int x;} class TestClass { public static void structtaker(TheStruct s) { s.x = 5; } public static void classtaker(TheClass c) { c.x = 5; } public static void Main() { TheStruct a = new TheStruct(); TheClass b = new TheClass(); a.x = 1; b.x = 1; structtaker(a); classtaker(b); Console.WriteLine("a.x = {0}", a.x); Console.WriteLine("b.x = {0}", b.x); }}这个例子的输出是:
a.x = 1b.x = 5从此列中可以看出结构和类的区别: 当一个结构被传递到一个方法时,被传递的只不过是一个副本(是值传递),而一个类被传递时,被传递的是一个参考(引用传递).所以a.x=输出的是1,不变,而b.x却变了. 结构可以不用new来实例化,而类却要.如果你不用new来实例化一个结构,那么所有的字段将仍然处于未分配状态,直到所有的字段被初始化.和类一样,结构可以执行接口(可以继承接口).更重要的是,结构没有继承性,一个结构不能从别的类继承,也不能是别的类的基类.
结构可以继承接口,不能有protected 修饰符;可以不使用new 初始化 在结构中初始化实例字段是错误的; 可以不使用new 初始化; 在结构中初始化实例字段是错误的; 类必须用new初始化;讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类: 1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。 3.在表现抽象和多级别的对象层次时,类是最好的选择 4.大多数情况下该类型只是一些数据时,结构时最佳的选择