C#基础(13)结构体

前言

随着函数的讲解完成,我想你已经初步有了写一些复杂逻辑功能的能力,但是我们会发现其实在我们大部分实际开发情况中,很多我们需要写的变量可能不只有一个属性。

他可能有很多变量,那这时候我们如果要把这些变量集中到一个东西身上,就需要结构体这个特殊的数据类型。

结构体是一种在编程语言中用来组织和存储相关数据的数据类型。它的历史可以追溯到20世纪60年代早期,在那个时候,编程语言的数据类型常常是原始的,无法直接表示复杂的数据结构。

1960年代的Fortran语言是第一个引入结构体概念的编程语言。在Fortran中,结构体被称为"记录"(record),它由一系列字段组成,每个字段都有自己的名称和类型。记录可以用于组织和存储相关的数据,使得程序变得更加灵活和可读。

C语言是在20世纪70年代早期引入结构体的编程语言之一。C语言的结构体与Fortran的记录类似,它也是由一系列字段组成的数据类型。C语言的结构体被广泛应用于数据结构、函数参数和返回值等方面。

随着时间的推移,结构体逐渐在其他编程语言中得到了广泛应用和支持。在面向对象编程语言中,结构体通常被称为"类"或"对象",并具有更强大的功能和概念。

总的来说,结构体的历史可以追溯到20世纪60年代,它是为了解决编程语言中数据组织和存储的问题而引入的。结构体通过定义一系列字段,可以将相关的数据组织在一起,提高程序的可读性和灵活性。

c#中博主也会进行类和结构体的区别的讲解,不过在此之前,我们先来了解到底结构体是什么。

概念

结构体是一种自定义变量类型,类似枚举,需要自己定义

它是数据和函数的结合,在结构体中,可以声明各种变量和方法,我们可以将他们看做一个整体。

基本语法

注意:

  1. 结构体一般写在namespace里
  2. 结构体的关键字struct
cs 复制代码
sturct 自定义结构体名(帕斯卡命名法)
{
    //变量,不能直接初始化。变量类型随便,包括结构体,但是不能是自己的结构体

    //构造函数

    //函数方法,表示这个数据结构的行为,在结构体中的方法不需要加static
}

具体实例

下面是一个使用C#编写的学生成绩结构体:

简单实现了输入名字和分数并将二者打印出来的效果。

csharp 复制代码
using System;

struct StudentGrade
{
    public string name;
    public int score;

    public void DisplayGrade()
    {
        Console.WriteLine("学生姓名:" + name);
        Console.WriteLine("学生成绩:" + score);
    }
}

class Program
{
    static void Main(string[] args)
    {
        StudentGrade student;

        Console.Write("请输入学生姓名:");
        student.name = Console.ReadLine();

        Console.Write("请输入学生成绩:");
        student.score = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("\n学生信息如下:");
        student.DisplayGrade();

        Console.ReadLine();
    }
}

我们实际情况可能会更复杂,但是这里只是给你展示一下结构体的功能,所以你能感受到结构体本身如何申明和使用就可以。

你可能注意到了一个新的关键词public,这个是访问修饰符,我们等下就进行讲解。

访问修饰符

概念:修饰结构体中变量和方法,是否能被外部使用

  • public 公共的 可以被结构体外部访问
  • private 私有的 只能在结构体内部使用

tips:默认不写都是private。

结构体的构造函数

  1. 没有返回值

  2. 函数名必须和结构体名相同

  3. 必须有参数

  4. 申明了构造函数,就必须在其中对所有变量数据初始化

例子

csharp 复制代码
using System;

struct StudentGrade
{
    public string name;
    public int grade;

    public StudentGrade(string name, int grade)
    {
        this.name = name;//本身的name变量等于传入的name值
        this.grade = grade;
    }

    public void DisplayInformation()
    {
        Console.WriteLine("Name: {0}", name);
        Console.WriteLine("Grade: {0}", grade);
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建学生成绩实例
        StudentGrade student = new StudentGrade("John Doe", 85);

        // 显示学生成绩信息
        student.DisplayInformation();

        Console.ReadLine();
    }
}
 

新关键词:this,代表结构体本身

总结

结构体的知识点就学完了,我想如果你掌握了结构体的知识,已经可以实现一些有具体功能的控制台应用了:学生分数管理器,或者说初学者必写的贪吃蛇。

其实你晃一眼看,都会觉得很简单,但是所有优秀的程序猿都会自己动手去敲代码。

一定要多练多写,你可以在我这里补充知识,但是练习敲代码,这个是我无法帮你完成的。

闲话不多说,请期待我下一篇博客。

相关推荐
腾讯TNTWeb前端团队6 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰9 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪10 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy10 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom11 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom11 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom11 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom11 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom11 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试