C# 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。本文主要介绍C# 结构(struct)。

1、结构(struct)

C# 中结构类型和类类型语法差不多,他们都是一种数据结构,都可以包括数据成员和方法成员。结构是一种值类型,并且不需要堆分配。 结构的实例化可以不使用 new 运算符。在结构声明中,除非字段被声明为 conststatic,否则无法初始化。 结构类型永远不是抽象的,并且始终是隐式密封的,因此在结构声明中不允许使用abstractsealed修饰符。结构不能声明默认构造函数(没有参数的构造函数)或析构函数,但可以声明带参数的构造函数。所有结构都直接继承自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# 中的简单类型,如intdoublebool等都是结构类型。如果需要的话,甚至可以使用结构类型结合运算符运算重载,再为C#语言创建出一种新的值类型来。


推荐文档