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#语言创建出一种新的值类型来。