(二十三)C#编程基础复习——Struct结构体

特此声明:本教程内容可能有部分参照其他博主的观点或描述,但始终不影响我学习的热情,代码全部自己手工敲打,编辑此教程目的不是为了博取大家眼球,也不是为利益所驱,只是纯属为了方便自己学习,编辑的过程中也让自己加深了对C#各个基础的印象,同时也让自己编码过程更加流畅顺利,最后还能帮助到有需要的人,代码都是自己亲测有效,如有侵权可以联系本人删除。

在C#中,结构体也称为结构类型("structure type”或“struct type”),它是一种可封装数据和相关功能的值类型,在语法上结构体与类(class)非常相似,它们都可以用来封装数据,并且都可以包含成员属性和成员方法。

一、定义结构体

要定义一个结构体需要使用struct关键字,每个结构体都可以被看作是一种新的数据类型,其中可以包含多个成员(成员属性和成员方法),例如下面声明的Books结构体:

struct Books
{
    public string title;
    public string author;
    public stirng subject;
    public int book_id;
};

在设计结构体时有以下几点需要注意:

  1. 不能为结构体声明无参数的结构函数,因为每个结构体中都已经默认创建了一个隐式的、无参数的构造函数;
  2. 不能在声明成员属性对它们进行初始化,静态属性和常量除外;
  3. 结构体的构造函数必须初始化该结构体中的所有成员属性;
  4. 结构体不能从其他类或结构体中继承,也不能作为类的基础类型,但是结构类型可以实现接口;
  5. 不能在结构体中声明析构函数
struct Books
    {
        public string title;
        public string author;
        public string subject;
        public int book_id;
    }//定义在类之上(与类同级),命名空间之内
     //以下是放在Main方法内:
            Books book1;
            Books book2;
            //定义book1的属性
            book1.title = "C#教程";
            book1.author = "C语言中文网";
            book1.subject = "C#编程教程";
            book1.book_id = 1234;
            //定义book2的属性
            book2.title = "http教程";
            book2.author = "c语言中文网";
            book2.subject = "http协议教程";
            book2.book_id = 123455;
            //输出book1的属性信息
            Console.WriteLine("book1 title:{0}",book1.title);
            Console.WriteLine("book1 author:{0}",book1.author);
            Console.WriteLine("book1 subject:{0}",book1.subject);
            Console.WriteLine("book1 book_id:{0}",book1.book_id);
            //输出book2的属性信息
            Console.WriteLine("book2 title:{0}",book2.title);
            Console.WriteLine("book2 author:{0}",book2.author);
            Console.WriteLine("book2 subject:{0}",book2.subject);
            Console.WriteLine("book2 book_id:{0}",book2.book_id);
            Console.ReadKey();

运行结果:

二、结构体的特征

C#中的结构体与C/C++中的结构体有很大的不同,在C#中结构体具有以下功能:

  1. 结构体中可以具有方法、字段、索引、属性、运算符方法和事件;
  2. 结构体中可以定义构造函数,但不能定义析构函数,需要注意的是,定义的构造函数不能没有参数,因为没有参数的构造函数是C#默认自动定义的,而且不能更改;
  3. 与类不同,结构体不能继承其他结构体或类;
  4. 结构体不能用作其他结构体或类的基础结构;
  5. 一种结构体可以实现一个或多个接口;
  6. 结构体成员不能被设定abstract、virtual或protected;
  7. 与类不同,结构体可以不用New操作符来实例化,当使用New操作符来实例化结构体时会自动调用结构体中的构造函数;
  8. 如果不使用New操作符来实例化结构体,结构体对象中的字段将保持未分配状态,并且在所有字段初始化之前无法使用该结构体实例;

三、类与结构体

类和结构体的主要区别如下所示:

  1. 类是引用类型,结构体是值类型;
  2. 结构体不支持继承,但可以实现接口;
  3. 结构体中不能声明默认的构造函数;

示例代码:

struct Books
    {
        public string title;
        public string author;
        public string subject;
        public int book_id;

        public void getValue(string t,string a,string s,int id)
        {
            title = t;
            author = a;
            subject = s;
            book_id = id;
        }
        public void disPlay()
        {
            Console.WriteLine("Title:{0}",title);
            Console.WriteLine("Author:{0}",author);
            Console.WriteLine("Subject:{0}",subject);
            Console.WriteLine("Book_id:{0}",book_id);
        }
    }


            Books book1 = new Books();//实例化Books结构体;
            Books book2 = new Books();//实例化Books结构体;
            //定义book1的属性
            book1.getValue("C#教程", "C语言中文网", "C#编程教程", 12345);
            //定义book2的属性
            book2.getValue("Http教程", "c语言中文网", "HTTP协议教程", 123456789);
            //输出book1的属性信息
            book1.disPlay();
            //输出book2的属性信息
            book2.disPlay();

            Console.ReadKey();

运行结果:

 

 

posted @   代号六零一  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示