类的定义的是引用类型,重点在堆上创建,有的时候类只包含极少的数据,因为管理堆而造成的开销是很大的。这时候更好的做法就是将类型定义成结构。结构是值类型,在栈上存储,能有效的减小内存管理的开销。c#基元类型在Microsoft.NET Framework中对应的类型,string和object类型是类而不是结构。

一、声明结构

  声明结构要以struct关键字开头,后面跟上类型名称,最后是大括号中的结构主体。

  例如下面代码,首先申请一个私有的abc三个变量,使用Variable方法设置变量值,分别使用三个Out方法返回值。

struct Variable
{
private int a, b, c;//设置为私有的变量
public Variable(int aa,int bb,int cc)
{
a = aa;
b = bb;
c = cc;
}
public int aOut()
{
return this.a;
}
public int bOut()
{
return this.b;
}
public int cOut()
{
return this.c;
}
}
namespace t

  注意:许多常用的操作符不能自动应用于自定义结构类型,例如:==和!=操作符就不能在自定义的结构体变量。但可以使用所有结构都公开的Equals()方法来比较,还可以作为自己的结构类型显示声明并实践操作符。如果一个概念的中点在于值而并不是功能,就可以使用结构来实现。

二、结构和类的区别

  1、不能为结构声明一个默认构造器,就是指的是无参数的构造器。应为编译器始终会自动生成一个,但是在类中,只有在没有自己写构造器的时候,编译器才会自动生成默认构造器,另外编译器为结构生成的默认构造的总是将字段设置为0、false或者null,这个和类是一样的。

  如果不想使用这些默认值,可以像上面的代码一样构建一个自己构造的有参数的构造器。但是需要做到的是吧所有的变量都要初始化,因为编译器通过自己创建的构造器来初始化变量。

  2、类的实例可以在声明时初始化,但是结构是不允许的。如果初始化会在编译时提示,结构中不能有实例字段初始值设定项。

三、结构的使用

  这个位置,假如使用默认的构造器的话是不用使用,new 后面的来初始化值的。也可以在方法中直接写。

c# 结构的使用的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(1):结构大观

    CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...

  2. 读书笔记:《HTML5开发手册》--HTML5新的结构元素

    读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. HTML5 语义元素(一)页面结构

    本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...

  5. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  6. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  7. ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构

    和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...

  8. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  9. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  10. Javacript实现字典结构

    字典是一种用[键,值]形式存储元素的数据结构.也称作映射,ECMAScript6中,原生用Map实现了字典结构. 下面代码是尝试用JS的Object对象来模拟实现一个字典结构. <script& ...

随机推荐

  1. laravel5.8笔记三:常用命令

    创建控制器 php artisan make:controller Index/IndexController 创建模型 php artisan make:model Index/IndexContr ...

  2. 23命令模式Command

    一.什么是命令模式 Command模式也叫命令模式 ,是行为设计模 式的一种.Command模式通过被称为 Command的类封装了对目标对象的调用行为以及调用参数. 二.命令模式的应用场景 在面向对 ...

  3. c# 正则

    Regex reg = new Regex("^do(es)(xy)?$"); var result = reg.Match("doesxy"); foreac ...

  4. sublime 安装ctags跳转以及跳转快捷键

    在source insight中有一个很好用的功能,就是函数的跟踪跳转,在阅读别人的代码的时候轻松的浏览原函数.我们知道,在使用vim的时候有个插件叫ctags,同理,在sublime text中也能 ...

  5. 【Zookeeper系列】ZooKeeper安装配置(转)

    原文链接:https://www.cnblogs.com/sunddenly/p/4018459.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪 ...

  6. mysql中的多表查询

    基本模式:t1 CROSS JOIN t2, t1 INNER JOIN T2 ON ,以及LEFTJOIN 和RIGHT JOIN. 这些都需要在实践中使用,多练习才行. 写一句sql语句:SELE ...

  7. react+mobx 编写 withStoreHistory 装饰器

    主要作用是向store里面注入一个history对象,方便story里面的函数调用 function withStoreHistory(storeName) { if (!storeName) ret ...

  8. spring和jdbctemplate

    1.spring与jdbc整合应用 a.增删改 -获取connection -获取statement -设置sql中?参数 -执行sql操作 -释放connection b.查询 -获取connect ...

  9. git fork代码并修改胡提交到自己的git仓库

    最近在参加阿里天池大数据中间件比赛(毫无头绪,打酱油中).看参赛要求,需要将官网的git工程clone下来,在此基础上做修改后提交到自己的仓库中. 由于以前并没有使用过git,所以差了比较多的资料,做 ...

  10. Codeforces 706C - Hard problem - [DP]

    题目链接:https://codeforces.com/problemset/problem/706/C 题意: 给出 $n$ 个字符串,对于第 $i$ 个字符串,你可以选择花费 $c_i$ 来将它整 ...