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,代表结构体本身

总结

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

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

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

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

相关推荐
组态软件3 小时前
web组态软件
前端·后端·物联网·编辑器·html
前端Hardy3 小时前
HTML&CSS:MacBook Air 3D 动画跃然屏上
前端·javascript·css·3d·html
cnsxjean6 小时前
SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传
java·前端·spring boot·分布式·后端·中间件·架构
ZL_5676 小时前
uniapp中使用uni-forms实现表单管理,验证表单
前端·javascript·uni-app
沉浮yu大海7 小时前
Vue.js 组件开发:构建可重用且高效的 UI 块
前端·vue.js·ui
代码欢乐豆7 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
绿荫阿广7 小时前
WinUI(WASDK)使用BotSharp框架开发多智能体桌面机器人管理助手(生图开关灯不在话下)
c#·.net·winui
莘薪8 小时前
JQuery -- 第九课
前端·javascript·jquery
好青崧8 小时前
CSS 样式入门:属性全知晓
前端·css·tensorflow
光头程序员8 小时前
工程化开发谷歌插件到底有爽
前端·react·工程化·前端工程化·谷歌插件