结构设计

结构是值类型。结构是在堆栈上或以内联方式分配的,当结构超出范围时将被释放。通常情况下,值类型的内存空间分配和释放的开销较小;但在需要大量装箱和取消装箱操作的方案中,值类型的执行性能较引用类型要差。有关更多信息,请参见装箱和取消装箱(C# 编程指南)

有关值类型和引用类型的更多信息,请参见通用类型系统概述

不要为结构提供默认的构造函数。

如果某一结构定义了默认构造函数,则在创建该结构的数组时,公共语言运行库会自动对每个数组元素执行该默认构造函数。

有些编译器(如 C# 编译器)不允许结构拥有默认构造函数。

对值类型实现 System.IEquatable`1。

在确定两个值类型是否相等时,IEquatable 要优于 Equals。通过使用接口,调用方可避免装箱和托管反射的不良性能影响。

确保所有实例数据均设置为零、false 或 null(根据需要)的状态是无效的。

如果遵循这一准则,新构造的值类型实例不会处于不可用的状态。例如,下面的结构的设计是错误的。参数化构造函数有意确保存在有效的状态,但在创建结构数组时不执行该构造函数。这意味着实例字段 label 初始化为 null(在 Visual Basic 中为 Nothing),这对于此结构的 ToString 实现是无效的。

   1: public  struct BadStructure 
   2: {
   3:     string label;
   4:     int width;
   5:     int length;
   6:     
   7:     public BadStructure (string labelValue, int widthValue, int lengthValue) 
   8:     {
   9:         if (labelValue == null || labelValue.Length ==0) 
  10:         {
  11:             throw new ArgumentNullException("label");
  12:         }
  13:         label = labelValue;
  14:         width = widthValue;
  15:         length = lengthValue;
  16:     }
  17:     
  18:     public override string ToString() 
  19:     {
  20:         // Accessing label.Length throws a NullReferenceException
  21:         // when label is null.
  22:         return String.Format("Label length: {0} Label: {1} Width: {2} Length: {3}",
  23:             label.Length, label, width,length);
  24:     }
  25: }
  26:  

在下面的代码示例中,GoodStructure 的设计对 label 字段的状态未作任何假定。ToString 方法设计为处理 null 标签。

   1: public  struct GoodStructure 
   2: {
   3:     string label;
   4:     int width;
   5:     int length;
   6:     
   7:     public GoodStructure (string labelValue, int widthValue, int lengthValue) 
   8:     {
   9:         label = labelValue;
  10:         width = widthValue;
  11:         length = lengthValue;
  12:     }
  13:     
  14:     public override string ToString() 
  15:     {
  16:         // Handle the case where label might be 
  17:         // initialized to null;
  18:         string formattedLabel = label;
  19:         int formattedLableLength;
  20:         if (formattedLabel == null)
  21:         {
  22:             formattedLabel = "<no label value specified>";
  23:             formattedLableLength = 0;
  24:         } else
  25:         {
  26:             formattedLableLength = label.Length;
  27:         }
  28:         return String.Format("Label Length: {0} Label: {1} Width: {2} Length: {3}",
  29:             formattedLableLength, formattedLabel, width, length);
  30:     }
  31: }

转载于:https://www.cnblogs.com/GnagWang/archive/2010/04/01/1701861.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘神仙高校的课堂!网友跪了:这就是差距啊!

全世界只有3.14 % 的人关注了爆炸吧知识疫情之下&#xff0c;家家闭门谢客&#xff0c;宅着就是做贡献了。原本一晃而过的7天假期变得“漫长”&#xff0c;延迟复工、居家办公&#xff1b;学生党们把寒假过成了暑假。随着各高校公布延迟开学时间到二月底&#xff0c;各种网络直…

oracle中prad函数_024 SQL函数

1. 使用ORDER BY排序(1) ORDER BY 子句的作用是什么&#xff1f;用ORDER BY子句排序。用于对结果集进行排序处理&#xff0c;提供了升序排序&#xff08;ASC&#xff09;与降序排序&#xff08;DESC&#xff09;如果不指定排序规则默认为升序排序。在排序中也可以使用没有包括在…

WPF 基于 .NET 5 框架和 .NET 6 的 SDK 进行完全单文件发布

本文来告诉大家如何基于 .NET 5 框架和 .NET 6 SDK 进行完全单文件发布&#xff0c;这是对 WPF 应用程序进行独立发布&#xff0c;生成的是完全单文件的方法在之前的版本&#xff0c;尽管也是基于 .NET 5 框架的 WPF 应用&#xff0c;然而在 .NET 5 的 SDK 下&#xff0c;除非是…

双绞线直连法如何才能使两台电脑实现共享

都知道用双绞线直连法组网&#xff0c;但是到底如何操作才能够实现呢&#xff1f;我在这里给大家介绍一下具体步骤&#xff1a;双机互连直接用双绞线连接&#xff0c;使用简单的对等网组网方案&#xff1a; 第一步、分别给两台机器装上网卡以及网卡的驱动程序&#xff1b; 第二…

世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!

一、基本定义 Arrays类&#xff0c;全路径java.util.Arrays&#xff0c;主要功能为操作数组&#xff0c;Arrays类的所有方法均为静态方法&#xff0c;所以 调用方式全部为Arrays.方法名 二、常用方法 1. <T> List<T> asList(T... a)可以将数组转化为相应的lis…

DNS(三)--子域授权和视图

实验题目&#xff1a;1.子域授权&#xff08;委派&#xff09;2.视图实验环境&#xff1a;1.vmware虚拟机2.linux子机两台3.XP测试机实验过程&#xff1a;一、子域授权在现实生活中我们世界互联网中的每个主机并不是在同一个域内&#xff0c;而是通过不同的依据将将其划分到不同…

学习使用RIA Framework Flex创建MySQL管理UI(初学Flex实例教程)

引言&#xff1a;一直想学习Flex来着&#xff0c;平时都是因为太懒的缘故&#xff0c;没有去实践&#xff0c;在csdn上无意看到这篇博文&#xff0c;觉得对自己挺有帮助的&#xff0c;就引过来了~ PHPMyAdmin的出现震撼了业界&#xff0c;这毫无疑问。它当然是基于PHP的最佳应用…

11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法

LED屏幕在生活中&#xff0c;随处可见&#xff0c;显示屏、广播屏等等&#xff0c;但是LED尺寸怎么计算的&#xff0c;你知道吗&#xff1f;今天我们来了解一下LED屏幕尺寸的计算方法。一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是用单元板做的。LED单元板常见型号及…

盘点数学里十大不需语言的证明

全世界只有3.14 % 的人关注了爆炸吧知识当谈到复杂数学定理的证明时&#xff0c;很多人常常为之色变&#xff0c;认为这只是一个枯燥的公式堆砌和深奥的数学推导过程。这当然是一个让笔者感到纠结的误解。因为数学证明中包含的美丽与精巧实在是一道亮丽的风景线&#xff0c;而这…

好端端的程序员,咋就成了新生代农民工!

实锤&#xff0c;程序员被划为新生代农民工&#xff0c;码农的称号终获官方认定&#xff0c;网上一片热议。虽然农民工的称呼有点突兀&#xff0c;然而更多的评论都是在羡慕程序员的高薪&#xff0c;尤其是那些能进一线大厂的幸运儿。往年.NET进大厂难&#xff0c;而今年腾讯、…

一个合格网络管理员的成长经历

随着信息化进程的飞速发展&#xff0c;组建网络已成为每个现代企业的必经之路。而在我国的大部分中小企业中&#xff0c;对网络这一神奇工具的使用还非常有限&#xff0c;究其原因主要因为在这些企业中缺乏完整的管理思路和控制管理能力的网络管理员。笔者以自己从一个对网络一…

大厂Java初级开发工程师!!!面试必问项之Set实现类:TreeSet

一、TreeSet 概述 1、TreeSet是 SortedSet 接口的实现类&#xff0c; TreeSet 可以确保集合元素处于排序状态。 2、TreeSet顾名思义他内部维护的是一个TreeMap&#xff0c;底层是红黑二叉树&#xff0c;他使得集合内都是有序的序列。 3、Tree可以按照添加对象的指定属性&…

【Android笔记】如何创建列表视图3

接着上一篇实现一个带有复选框的列表视图&#xff0c;这要求对Adapter有比较清楚的理解。1. ArrayAdapter从Layout读取TextView控件&#xff0c;返回给ListView显示&#xff0c;这个处理在ArrayAdapter的getView方法里&#xff0c;我们可以继承这个类&#xff0c;覆盖getView&…

史上最硬核的数学老师!搞发明、造大炮,让战斗民族直叫爸爸,看完我跪了......

全世界只有3.14 % 的人关注了爆炸吧知识一直以来&#xff0c;有好多朋友在后台和知识君吐槽&#xff0c;自己在追逐菲尔兹奖的路上总被数学公式所绊倒&#xff0c;一见到数学公式就头疼&#xff01;这时&#xff0c;知识君就会搬出数学史上最萌的公式——“么么哒”公式&#x…

Event Logging 技术简介(转载)

1. EVENT LOGGING概述当错误发生时&#xff0c;系统管理员或技术支持需要知道错误原因是什么&#xff0c;如何恢复丢失数据和阻止错误复现。 WINDOWS的Event-logging服务为此提供了解决方案。应用程序&#xff0c;操作系统或其它系统服务可以向该服务记录重要的事件消息&am…

a标签传参接收_[pyecharts1.8] 系列配置之标签设置

今日心情 &#xff1a;em....又是一堆蛋疼的事情堆积的一周...文章会迟到&#xff0c;但不会缺席&#xff0c;准备好脑子接收下[pyecharts1.8] 系列配置之标签设置本文档(以及pyecharts使用手册中的其他文档)将会持续更新。 有些内容标记为待更新的&#xff0c;有时间我会补充上…

这个寒冬,如何让我们的身价翻倍?

这个寒冬&#xff0c;如何让我们的身价翻倍&#xff1f; ——《深入理解.NET&#xff08;第2版英文版&#xff09;》读后感 微软4大名著评选结果揭晓 在开始正文之前&#xff0c;我先给大家讲一个真实的故事&#xff1a;我有一位朋友&#xff0c;他的一位同学原来是做测试的&am…

导入shape文件到SDE数据库

/** * pDataSet:要导出的数据库的数据集&#xff0c;如果直接导入到数据库而不是数据集&#xff0c;则使用强制转换IWorkspace-->IDataset * strFeatFileDir:要导入的shape文件所在目录 * strFeatFileName:要导入的shape文件名 * isWorkspace:标识是导入数据库还是数据集 *s…

ASP.NET Core 配置 - 创建自定义配置提供程序

ASP.NET Core 配置 - 创建自定义配置提供程序在本文中&#xff0c;我们将创建一个自定义配置提供程序&#xff0c;从数据库读取我们的配置。我们已经了解了默认配置提供程序的工作方式&#xff0c;现在我们将实现我们自己的自定义配置提供程序。对于自定义配置提供程序&#xf…

为什么你的孩子拼命做题,成绩还总是上不去?

▲ 点击查看以前有句名言&#xff1a;“学好数理化&#xff0c;走遍天下都不怕。”这句话放到现在可能并不一定适用&#xff0c;但是数理化生仍然是在孩子整个学习生涯中&#xff0c;占比分量非常重的学科。然而&#xff0c;对很多孩子而言&#xff0c;学习数理化生却是很枯燥乏…