1、结构(struct)
C# 中结构类型和类类型语法差不多,他们都是一种数据结构,都可以包括数据成员和方法成员。结构是一种值类型,并且不需要堆分配。 结构的实例化可以不使用 new 运算符。在结构声明中,除非字段被声明为 const
或 static
,否则无法初始化。 结构类型永远不是抽象的,并且始终是隐式密封的,因此在结构声明中不允许使用abstract
和sealed
修饰符。结构不能声明默认构造函数(没有参数的构造函数)或析构函数,但可以声明带参数的构造函数。所有结构都直接继承自System.ValueType
,后者继承自 System.Object
。 结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。
2、定义结构(struct)
定义一个结构体,需要使用 struct
语句。struct
语句为程序定义了一个带有多个成员的新的数据类型。
例如,
struct Point
{
pubilc string type;
public int x;
public int y;
};
注意:结构体是值类型,直接包含它自己的数据,每个结构都保存自己的一份数据,修改每一个结构的数据都不会对其他结构的数据造成影响。
using System; namespace cjavapy { struct Point { public string type; public int x; public int y; } struct Area { public string type;//不能直接对其进行赋值 public int x; public int y; public static string str = null; //静态变量可以初始化 public Area(int x, int y) //带参数的构造函数 { this.x = x; this.y = y; this.type = ""; Console.WriteLine("x={0},y={1},str={2}", x, y, str); } } public class testStructure { public static void Main(string[] args) { Point p1; /* 声明 p1,类型为 Point */ Point p2; /* 声明 p2,类型为 Point */ Area a = new Area(1, 2); /* p1 */ p1.type = "solid"; p1.x = 101; p1.y = 20; /* p2 */ p2.type = "dot"; p2.x = 30; p2.y = 120; /* 打印 p1 信息 */ Console.WriteLine("p1 type : {0}", p1.type); Console.WriteLine("p1 x : {0}", p1.x); Console.WriteLine("p1 y : {0}", p1.y); /* 打印 p2 信息 */ Console.WriteLine("p2 type : {0}", p2.type); Console.WriteLine("p2 x : {0}", p2.x); Console.WriteLine("p2 y : {0}", p2.y); Console.ReadKey(); } } }
3、结构和类的区别
1)结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是引用。
2)结构类型直接存储成员数据,让其他类的数据位于对中,位于栈中的变量保存的是指向堆中数据对象的引用。
3)结构类型可以有实例构造函数和静态构造函数,但不能有析构函数。
注意:C# 中的简单类型,如int
、double
、bool
等都是结构类型。如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来。