关于C#结构体 你需要知道的

 更新时间:2020年06月04日 15:52:17   作者:Tynam Yang  
这篇文章主要介绍了关于C#结构体的相关知识,以及使用方法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下

结构体概念

  在C#中,结构体是值类型,一般适用于表示类似Point、Rectangle、Color的对象

  值类型能够降低对堆的管理、使用。降低垃圾回收,表现出更好的性能。可是值类型也有不好的一面。会涉及到装箱拆箱等操作

结构体声明

  结构体声明定义了一种新的数据类型,这个数据类型可以为程序包含一个以上的成员变量

  要定义一个结构,需要使用struct语句

声明一个学校的结构

struct School
{
  public int name;
  public string head_master;
  public int class_number;
  public int student_number;
};

结构体的使用

using System;

struct School
{
  public int school_id;
  public string head_master;
  public int class_number;
  public int student_number;
};

public class testStructure
{
  public static void Main(string[] args)
  {
    School TianYangHighSchool; // 声明一个学校

    // 学校详细
    TianYangHighSchool.school_id = 12345;
    TianYangHighSchool.head_master = "Tynam.Yang";
    TianYangHighSchool.class_number = 6;
    TianYangHighSchool.student_number = 456;

    // 打印学校信息
    Console.WriteLine("田阳高中学校的学校id是:{0}," +
      "校长名字是:{1}," +
      "一共有{2}个教室," +
      "总共有{3}名学校",
      TianYangHighSchool.school_id,
      TianYangHighSchool.head_master,
      TianYangHighSchool.class_number,
      TianYangHighSchool.student_number);

    Console.ReadKey();
  }
}

运行结果

结构体特点

  结构体可以有方法,字段,索引器,属性,操作符方法和事件

  结构体可以有定义的构造函数,但不能是析构函数。但是不能为结构定义默认构造函数。默认构造函数是自动定义的,不能被更改

  与类不同,结构体不能继承其他结构体或类

  结构体不能用作其他结构或类的基础

  结构体可以实现一个或多个接口

  结构成员不能被指定为抽象,虚拟或受保护

  当使用New运算符创建一个struct对象时,它将调用相应的构造函数。 与类不同,可以在不使用New运算符的情况下实例化结构体

  如果不使用New运算符,则字段保持未分配,并且在所有字段初始化之前不能使用对象

结构体 VS 类

  结构体是值类型,存储在栈上,类是引用类型,存储在托管堆上,结构体在声明的时候就已经为其分配栈上的内存了,而类需要用 new为其分配堆上面的内存

  结构体是隐式密封的,不能用 sealed 和 abstract 修饰,结构体不能被继承,类可以被继承

  结构体中的实例字段只能声明,不能赋值,而类没有限制,结构体只声明没有用 new 进行初始化时,可以给他的实例字段赋值,而类不行

  结构体没有析构函数,结构体中的方法不能用 virtual 和 abstract 修饰,但是可以用 override 修饰,用来重写父类的方法

  结构体不能显示给出默认构造函数(无参数的构造),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义构造函数时,默认构造会被隐藏,要想调用默认构造,必须显示给出默认构造

  结构体的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制

结构与类的选择

  堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些

  结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低

  在表现抽象和多级别的对象层次时,类是最好的选择

  大多数情况下该类型只是一些数据时,结构时最佳的选择体的使用

以上就是关于C#结构体 你需要知道的的详细内容,更多关于c#结构体的资料请关注脚本之家其它相关文章!

相关文章

  • C#实现获取鼠标句柄的方法

    C#实现获取鼠标句柄的方法

    这篇文章主要介绍了C#实现获取鼠标句柄的方法,详细的讲述了实现获取鼠标句柄的具体步骤及实现方法,并附有完整的实例源码供大家参考,需要的朋友可以参考下
    2014-09-09
  • C# 9 新特性——record的相关总结

    C# 9 新特性——record的相关总结

    这篇文章主要介绍了C# 9 新特性——record的相关总结,帮助大家更好的理解和学习使用c# 9的新特性,感兴趣的朋友可以了解下
    2021-02-02
  • List转换成DataSet实现代码

    List转换成DataSet实现代码

    怎样把List转换成DataSet本人很是疑惑,于是搜集整理一番,需要的朋友可以参考下
    2012-12-12
  • 如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    这篇文章主要给大家介绍了关于如何利用Jenkins + TFS为.Net Core实现持续集成/部署的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • Unity利用UGUI制作提示框效果

    Unity利用UGUI制作提示框效果

    这篇文章主要为大家详细介绍了Unity利用UGUI制作提示框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • C# string转unicode字符的实现

    C# string转unicode字符的实现

    本文主要介绍了C# string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • c# 使用谷歌身份验证GoogleAuthenticator的示例

    c# 使用谷歌身份验证GoogleAuthenticator的示例

    这篇文章主要介绍了c# 使用谷歌身份验证GoogleAuthenticator的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • c#注册客户端事件示例

    c#注册客户端事件示例

    这篇文章主要介绍了c#注册客户端事件使用示例,大家参考使用吧
    2014-01-01
  • C#无限参数的写法

    C#无限参数的写法

    这篇文章主要介绍了C#无限参数的写法,通过循环遍历再结合paras.Add方法实现无限参数的功能,是比较实用的技巧,需要的朋友可以参考下
    2014-12-12
  • C#程序窗体间使用回调事件方式通讯示例

    C#程序窗体间使用回调事件方式通讯示例

    C#有事件这个东西,为啥不用呢,而且事件在窗体通信方面,有着更为方便的作用,我们知道事件实际上就是状态的捕获,数据互相操作的例子
    2013-12-12

最新评论