1.引言:
在我们之前的文章中,介绍了类及面象对象的基本概念,那我们也知道了类是引用类型,是保存在托管堆中的。通过一定义类,我们可以在数据的生存期上得到很高的灵活性,但是也会让程序的性能有一定的损失。虽然这种损失很小,但当我们只需要定义一个很小的结构时,用类来定义就有些浪费,对于这样的问题,C#有相对应的方案来解决,那就是今天我们要学习的-结构(struct)。
2.概念:
在之前我们最开始学数据类型的时候,就提到过结构(struct)是一种值类型。也就是说,结构实例是分配在线程堆栈上的,结构本身是包含有值的,而不是像类一样的引用类型,包含的是所指到堆当中的引用(指针)。也就是说,结构的生存周期与简单类型(int,double等)相同的。所以说我们在定义较小的类时,可以尽量使用结构。
3.与类的区别:
(1)结构是值类型,不是引用类型。
(2)结构可以继续接口,但是不可以继承类或结构。
(3)结构的构造方法的工作方式有所不同,只能声明带参数的构造方法,且不能声明析构方法。
(4)可以指定字段如何在内存中布局。
4.什么时候使用(struct)结构:
虽然我们可以用(class)类完全代替(struct)结构,但是为了程序的性能的提高,建议大家在以下情况下使用结构:
建议大家在实现一个用于存储数据或数据量较小的结构时来使用结构,因为结构是值类型,所以在性能的影响上,是能起到正面作用的。
5.声明:
struct Users
{
    public string UserName;
    public string UserSex;
    public int UserAge;
    /// <summary>
    /// Users结构的构造方法
    /// </summary>
    /// <param name="username"></param>
    /// <param name="usersex"></param>
    /// <param name="userage"></param>
    public Users(string username, string usersex, int userage)
    {
        this.UserName = username;
        this.UserSex = usersex;
        this.UserAge = userage;
    }
    /// <summary>
    /// 得到用户信息
    /// </summary>
    public void GetInfo()
    {
        Console.WriteLine("姓名:{0},性别:{1},年龄:{2}", UserName, UserSex, UserAge);
    }
}
6.使用
方法一:
static void Main()
        {
            Users user;
            user.UserName = "张三丰";
            user.UserSex = "女";
            user.UserAge = 18;
            user.GetInfo();
        }
方法二:
static void Main()
        {
            Users user = new Users("张三丰","男",29);
            user.GetInfo();
        }
关于 struct的内容还有很多在本文中没有涉及到的,再往深说的话又要扯到值类型与引用类型的内存分配问题了,这样的问题,在互联网上有很多朋友写出了非常棒的文章,大家可以在博客园,51cto等园子中找到。

快速撑握C#知识点系列之(struct)结构相关推荐

  1. 快速撑握C#知识点系列文章

    首先,我写这个系例只是为了那些想快速学习C# 相关知识的朋友提供,可能有些知识点写不到.请原谅! 1.快速撑握C#知识点之什么是C#及.NET FrameWork 2.快速撑握C#知识点之编写一个C# ...

  2. 快速撑握C#知识点之变量,类型及类型转换

    1.变量:变量是指在程序的运行过程中随时可以发生变化的量. 语法:数据类型 变量名; 例如: string stra="这是一个字符串"; 2.常量:也称常数,是一种恒定的或不可变 ...

  3. 快速撑握C#知识点之类的数据成员

    在看过类与对象之后,来了解一下类的成员. 类的成员共分为两个大类,一是数据成员,另一类是函数成员: 数据成员:字段.常量.事件. 函数成员:方法.属性.索引器.构造函数.析构函数.操作符. 字段:字段 ...

  4. 快速撑握五笔输入法的末笔识别

    最近一些朋友在留言中提到学习五笔时遇到的一些困难,特别是末笔识别方面比较困惑.在这里向大家介绍一下末笔识的方法.其实规则很简单,只要大家用心体会一下,很容易撑握. 我们知道五笔输入法是跟据汉字的五种基 ...

  5. 初级黑客必需撑握的8个DOS命令

    初级黑客必需撑握的8个DOS命令  一,ping  它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是 ...

  6. 初级网管或黑客必需撑握的8个DOS命令

    初级网管或黑客必需撑握的8个DOS命令 一.ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理 ...

  7. 如何快速复习C语言知识点

    如何快速复习C语言知识点 如何快速复习C语言知识点 如何快速复习C语言知识点 1. 数据类型 1.1 基本类型 1.2 构造类型 1.3指针类型 2.输入输出和运算符 3.控制语句 3.1选择结构 3 ...

  8. 如何快速掌握技术和知识点

    如何快速掌握技术和知识点 文章目录 如何快速掌握技术和知识点 掌握需求 看看能否使用传统技术解决 如何高效应对工作和学习 掌握需求 工作需求 跳槽,对方要求 技术控 看看能否使用传统技术解决 能解决, ...

  9. mysql知识点系列-数据目录(Data目录)下文件类型一窥究竟

    本文主要基于<高性能MySQL> 文章目录 1.数据库目录 2.frm文件 3.ibd文件 4.ibdata文件 5.ib_logfile文件 6.UNDO日志 7.慢查询日志 8.二进制 ...

最新文章

  1. 局域网延时大怎么办?
  2. 倒计时 2 天 | 解锁生鲜电商的战“疫”秘密
  3. jdby mysql_06_dljd_mysql数据库常用操作
  4. linux后缀为tar.xz,xz后缀名文件解压方法
  5. python机制_python 加载模块机制
  6. Struts2之环境配置
  7. sql server中扩展存储过程
  8. Java8之Stream详解
  9. boost::asio 网络传输错误码的一些实验结果(recv error_code)
  10. vue 跳转到选项卡_使用 DevTools 新增的 Issues 选项卡发现网页问题
  11. delphi打包python_python for delphi 组件安装和调试的那些坑儿 !
  12. NLP自然语言处理系列-业界前沿动态 对话式数据分析的关键技术——语义解析Text-to-SQL
  13. leetcode 75.颜色分类
  14. STM32驱动TM1616程序加原理图
  15. 笔记本win7怎么重装系统步骤
  16. 【飞桨PaddleSpeech语音技术课程】— 语音唤醒
  17. 如果你是我眼中一滴泪,那么我永远不会哭
  18. 大学英语期末考计算机上答卷,英语期末考试总结(精选7篇)
  19. pdksh-5.2.14-36.el5.i386.rpm
  20. 从软件工程师到IT猎头:我的一点经历和感触

热门文章

  1. 漫画 | 如果面试时大家都说真话......
  2. 程序员真香!IT 业 2020 年平均工资最高
  3. 30 岁码农人生:人生至暗时,你依然能窥见光明
  4. 听说这是互联网公司招工时忽悠的黑话? | 每日趣闻
  5. Android组件化打造知乎日报系列(一)—— 项目架构搭建
  6. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)
  7. Android自定义绘制 绘制基础
  8. 传说中的“智能袖套”:把柔性手机戴在手腕上
  9. 函数对象,名称空间与作用域,闭包,装饰器
  10. [20190113]四校联考