【C#基础详解】(九)结构体

9.1 结构体的定义

在C# 中,结构体(struct)是一种轻量级的数据类型,可以用来封装少量相关数据。

结构体与类类似,但有一些重要的区别,结构体是在栈上分配的,而类是在堆上分配的。结构体是值类型数据结构,它使得一个单一变量可以存储各种数据类型的相关数据。

使用结构体的好处包括:占用内存少、传递时不需要参数类型的装箱和拆箱操作、性能高等。但同时也有一些限制,比如不能继承其他结构体或类,也不能自定义无参构造函数等。定义一个结构体,使用struct

语法:

[public] struct 结构名

{

成员1;//字段--起名的时候一般以下划线开头

成员2;

……

}

结构体和类的使用差不多,都是先实例化一个对象,然后使用对象名.变量名来访问其中的变量。但是结构体中不能初始化变量的值,而类中可以初始化变量值。

扫描二维码关注公众号,回复: 15507415 查看本文章

9.2 结构体的作用

1)定义轻量级对象:与类不同,结构体是值类型(Value Type),可以避免在堆中分配内存,因此比类更加轻量级,适合处理简单的数据类型。

2)结构体和其他类型基础数据类型一样,例如int类型、double类型,只不过结构体可以做成我们想要的数据类型。

3)在实际项目中,结构体是大量存在的,使用结构体来封装一些属性来组成新的类型,其目的是简化运算。在一些需要高效处理大量数据的场景下,使用结构体可以显著提高程序的性能。

4)结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。4)结构是C#程序员用来定义自己的值类型的最普遍的机制。结构比枚举更强大,因为它提供函数、字段、构造函数、操作符和访问控制。

5)嵌套使用:结构体可以嵌套在其他结构体或类中,形成复杂的数据结构。

6)与其他语言交互:由于许多其他编程语言中也有结构体的概念,

7)实现接口:结构体可以实现接口,使得它们可以像类一样具有一些面向对象的特性,如多态。因此使用结构体可以方便地与其他语言进行交互。

结构体示例:
namespace 结构
{
    public struct Books
    {
        public string title;
        public string author;
        public string subject;
        public int book_id;
    };
    class Program
    {
        static void Main(string[] args)
        {
            Books Book1;
            Book1.title = "A";
            Book1.author = "B";
            Book1.subject = "C";
            Book1.book_id = 1;
            Console.WriteLine("书名:{0},作者:{1},学科:{2},书号:	{3}", 
            Book1.title,Book1.author,Book1.subject,Book1.book_id);
            Console.ReadKey();
    }
}

输出结果:

书名:A,作者:B,学科:C,书号:1

9.3 结构体的特点

1)结构体是值类型,而不是引用类型。

2)结构体通常用于存储小型数据集合,比如坐标、颜色等。

3)结构体可以包含字段、属性、方法和构造函数。

4)结构体可以实现接口,但不能继承类。

5)结构体不支持析构函数,也不支持显式指定默认构造函数。

6)结构体在传递时会被复制,而不是按引用传递。

9.4 结构体的练习

练习1
public struct XinXi //一个结构型变量
{
    public string _name;
    public int _age;
    public Gender _gender;
}
public enum Gender //一个枚举类型
{
    男,
    女
}
class Program
{
    static void Main(string[] args)
    {
        XinXi zhangSan,xiaoLan;
        zhangSan._name = "张三";
        zhangSan._age = 18;
        zhangSan._gender = Gender.男;
        Console.WriteLine($"你好,我叫{xiaoMing.name},我今年{xiaoMing.age}岁了,
        我是{xiaoMing.gender}生");
        xiaoLan._name = "小兰";
        xiaoLan._age = 20;
        xiaoLan._gender = Gender.女;
        Console.WriteLine($"你好,我叫{xiaoLan.name},我今年{xiaoLan.age}岁了,
        我是{xiaoLan.gender}生");
    }
}
练习2
    enum orientation : byte
    {
        north = 1,
        south = 2,
        east = 3,
        west = 4
    }
    struct route
    {
        public orientation direction;
        public double distance;
    }
   class Program
    {
        static void Main(string[] args)
        {            
            route myRoute;
            int myDirection = -1;
            double myDistance;
            Console.WriteLine("1)North\n2)South\n3)East\n4)West");
            do
            {
                Console.WriteLine("Select a direction:");
                myDirection = Convert.ToInt32(Console.ReadLine());
            } while ((myDirection < 1) || (myDirection > 4));
            Console.WriteLine("Input a distance:");
            myDistance = Convert.ToDouble(Console.ReadLine());
            myRoute.direction = (orientation)myDirection;
            myRoute.distance = myDistance;
            Console.WriteLine($"myRout specifies a direction of 
            {myRoute.direction} " + $"and a distance of {myRoute.distance}");
            Console.ReadKey();
        }
    }

9.5 类与结构体

类和结构有以下几个基本的不同点:

1)类是引用类型,结构是值类型。

2)结构不支持继承。

3)结构不能声明默认的构造函数。

结构和类的适用场合分析:

1)当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些。

2)对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低。

3)在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。

4)大多数情况下,目标类型只是含有一些数据,或者以数据为主。

猜你喜欢

转载自blog.csdn.net/Y1RV1NG/article/details/129716530
今日推荐