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

总结

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

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

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

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

相关推荐
GISer_Jing1 小时前
前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读
前端·javascript·vue
不知几秋2 小时前
数字取证-内存取证(volatility)
java·linux·前端
敲代码的 蜡笔小新3 小时前
【行为型之中介者模式】游戏开发实战——Unity复杂系统协调与通信架构的核心秘诀
unity·设计模式·c#·中介者模式
水银嘻嘻3 小时前
08 web 自动化之 PO 设计模式详解
前端·自动化
程序猿多布3 小时前
使用Visual Studio将C#程序发布为.exe文件
c#·visual studio
老衲有点帅5 小时前
C#多线程Thread
开发语言·c#
Zero1017135 小时前
【详解pnpm、npm、yarn区别】
前端·react.js·前端框架
&白帝&5 小时前
vue右键显示菜单
前端·javascript·vue.js
Wannaer5 小时前
从 Vue3 回望 Vue2:事件总线的前世今生
前端·javascript·vue.js
羽球知道5 小时前
在Spark搭建YARN
前端·javascript·ajax