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

总结

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

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

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

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

相关推荐
吕彬-前端14 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(二)
前端·react.js·前端框架
code bean27 分钟前
【C#基础】函数传参大总结
服务器·开发语言·c#
小白小白从不日白35 分钟前
react hooks--useCallback
前端·react.js·前端框架
恩婧43 分钟前
React项目中使用发布订阅模式
前端·react.js·前端框架·发布订阅模式
mez_Blog44 分钟前
个人小结(2.0)
前端·javascript·vue.js·学习·typescript
珊珊而川1 小时前
【浏览器面试真题】sessionStorage和localStorage
前端·javascript·面试
森叶1 小时前
Electron 安装包 asar 解压定位问题实战
前端·javascript·electron
drebander1 小时前
ubuntu 安装 chrome 及 版本匹配的 chromedriver
前端·chrome
软件技术NINI1 小时前
html知识点框架
前端·html
深情废杨杨1 小时前
前端vue-插值表达式和v-html的区别
前端·javascript·vue.js