C# 关于结构体的使用

1、定义:

使用关键字:struct

语法:

复制代码
struct StructName
{
    // 成员声明
}

其中,StructName为结构体的名称。

结构体可定义字段、属性、方法和构造函数等成员,如:

复制代码
struct Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

2、使用:

先声明结构体示例,使用new关键字,然后就可以初始化里面的字段、访问结构体成员、调用结构体方法,如:

复制代码
using System;
using System.Text;

//结构体定义
struct Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}


//主程中使用
public class test
{
   public static void Main(string[] args)
   {
      //声明实例,因结构体是值类型,所以实例化的person为结构体变量。
      Person person = new Person();

      //初始化
      person.Name = "John";
      person.Age = 30;

      Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
      
      //结构体方法调用
      person.PrintInfo();      

   }
}

通过结构体的定义与使用,我们会发现它和类很相似, 但是它们是有很大区别的:

  • 结构体是值类型,它在栈上分配内存,并且在赋值或传递时会创建副本,意思就是当你将一个结构体赋值给另一个结构体变量时,它会创建一个新的副本。而类是引用类型,它在堆上分配内存,变量存储的是对实例的引用,当你将一个类赋值给另一个类变量时,它们引用的是同一个实例。
  • 由于堆空间大,栈空间小,所以导致类的访问速度慢,结构体的访问速度快。所以对于小型、不可变、轻量级的对象,比如坐标、日期、颜色使用结构体会更好,而具有大量逻辑数据或者复杂行为和状态或者需频繁复制的,则使用类更为合适。
  • 结构体默认具有一个无参数的公共构造函数,该构造函数自动初始化结构体的字段为默认值,而类默认具有一个无参数的隐式公共构造函数,假如需要定义自己的构造函数,必须显式地定义一个无参数的构造函数。
  • 结构体默认是不可变的,即结构体的字段在创建后不能更改,而类是可变的,我们可以在类的实例上修改字段和属性的值。
  • 结构体不支持继承,而类支持继承,所以在定义抽象对象或者多级对象时,使用类为最佳选择。
相关推荐
Lhappy嘻嘻9 分钟前
网络初识|基础入门:局域网广域网、IP 端口、TCP/IP 五层模型与封装解封装全过程
java·开发语言·网络·笔记·网络协议·tcp/ip
Wang's Blog23 分钟前
Go-Zero基础入门1: 微服务框架与选型分析
开发语言·微服务·golang
科技道人9 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
逝水无殇11 小时前
C# 异常处理详解
开发语言·后端·c#
玖玥拾13 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾13 小时前
Rust 学习目录
开发语言·学习·rust
云泽80813 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦13 小时前
GO---可见性规则
开发语言·golang
逝水无殇14 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子15 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript