首页 > 编程语言 >(二十三)C#编程基础复习——Struct结构体

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

时间:2023-11-22 11:45:15浏览次数:35  
标签:Console Struct C# id 复习 book1 book2 public 结构

在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();

运行结果:

 

 

标签:Console,Struct,C#,id,复习,book1,book2,public,结构
From: https://www.cnblogs.com/daihaoliulingyi601/p/17848184.html

相关文章

  • DELPHI WIn7下使用 NetHttpClient 请求HTPPS 网站
    转载自:WIn7下使用NetHttpClient请求HTPPS网站-EEEEEEEEEEEEEEEEEEE-博客园(cnblogs.com)WIn7下使用NetHttpClient请求HTPPS网站在WIN7下使用HttpClient会报以下两种错;1ServerCertificateInvalidornotpresent2Errorsendingdata:(12175)发生了安......
  • SQL DCL语句
    DataControlLanguage数据控制语言。用于控制对数据的访问,主要的DCL操作包括GRANT(授予用户访问和操作数据库的权限)和REVOKE(撤销用户的数据库权限)。几乎所有的数据库管理系统(DBMS)都支持GRANT和REVOKE命令,这些命令用于控制数据库的访问权限。GRANT用于授予权限,而REVOKE......
  • [949] Using re to extract unstructured tables of PDF files
    Hereistheproblem,thisunstructuredtableofaPDFfilecannotbeextrctedasatabledirectly.Wecanonlyextractthewholetextsofeverypage.MytaskistoextractthePlaceID,PlaceName,andTitleDetails.ThenonlyTitleDetailsincludepatte......
  • Linux 创建分区出现 no free sectors available 解决方法
    在Linux系统上,我们可能会碰到创建分区时报错:nofreesectorsavailable的情况。这种情况下,我们该如何处理呢?本文将针对该问题提供解决方法。1.确定磁盘使用情况首先,我们需要确定磁盘的使用情况。可以使用fdisk、parted等工具来查看磁盘分区情况并确认是否还有空余的磁盘空间。......
  • 教你如何使用PyTorch解决多分类问题
    本文分享自华为云社区《使用PyTorch解决多分类问题:构建、训练和评估深度学习模型》,作者:小馒头学Python。引言当处理多分类问题时,PyTorch是一种非常有用的深度学习框架。在这篇博客中,我们将讨论如何使用PyTorch来解决多分类问题。我们将介绍多分类问题的基本概念,构建一个简单的......
  • 队列和循环队列(ArrayQueueAndCircleQueue)
    队列数组队列1.初始化队列privateintmaxsize;//最大长度privateintfront;//指向队首的前一个位置privateintrear;//指向队尾privateint[]arr;publicArrayQueue(intmaxsize){this.maxsize=maxsize;arr=newint[maxsize];......
  • 触发器dff与锁存器latch的用法和区别
    dff与latch的用法和区别废话少说,dff是边沿敏感,latch是电平敏感。用法上图:功能仿真: 以下部分是摘抄别人的技术心得:latch(锁存器)与DFF(D触发器)的区别1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同......
  • AtCoder Beginner Contest 329
    劳累一天不该写题,启发式合并都写错了A-Spread(abc329A)题目大意给定一个字符串,将每个字符输出出来,中间留个空格。解题思路遍历输出即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_std......
  • WIZnet socket API 前言
    WIZnetsocketAPIWIZnetsocketAPIs基于BerkeleysocketAPIs,因此有着相似的名字和接口。但是也是有着些许的不同。APIWIZnetBerkeleysocket()OObind()XOlisten()OOconnect()OOaccept()XOrecv()OOsend()OOrecvfrom()OO......
  • panjiachen的vue-admin-template中关闭eslint
    由于有语法检查,所以我想关闭eslint低版本:  在conf/index.js中将useEslint改为flase高版本:  在.eslintrc.js中有rules,这里边都是eslint的校验规则,如果你不想有校验,可以直接将rule括号中的规则都注释掉   ......