struct结构 与 class类 的区别

结构具有以下特点:

  • 结构是值类型,而类是引用类型。

  • 向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。

  • 与类不同,结构的实例化可以不使用 new 运算符

  • 结构可以声明构造函数,但它们必须带参数。

  • 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object

  • 结构可以实现接口。

  • 在结构中初始化实例字段是错误的。

--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
// CS0573.cs
namespace x
{
    public class clx
    {
        public static void Main()
        {
        }
    }

    public struct cly
    {
        clx a = new clx();   // CS0573
        // clx a;            // OK
        int i = 7;           // CS0573
        // int i;            // OK
    }
}

错误消息

“field declaration”: 结构中不能有实例字段初始值设定项

不能对 struct 的实例字段进行初始化。值类型的字段将被初始化为其默认值,而引用类型字段将被初始化为 null。

--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=
// CS0568.cs
public struct ClassY
{
   public int field1;
   public ClassY(){}   // CS0568, cannot have no param constructor
   // Try following instead:
   // public ClassY(int i)
   // {
   //    field1 = i;
   // }
}

public class ClassX
{
   public static void Main()
   {
   }
}

错误消息

结构不能包含显式的无参数构造函数

每个 struct 均已有一个将对象初始化为零的默认构造函数。因此,可以为结构创建的构造函数必须带有一个或多个参数。

--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=

posted on 2006-10-11 10:49  Clark Chan  阅读(1568)  评论(0编辑  收藏  举报

导航