关于C#中的结构(下)

上一篇就结构的性能、局限性以及它和类的比较作了简单的描述,这篇我将接着介绍在使用结构时应该注意和把握的原则:
通过上篇的介绍,我们可以很自然的意识到结构在效率上的优越性(相对于类),这主要归因于它们在底层的值类型结构。
不过,它们的对于大容量数据和复杂度高的算法进行处理时所表现出来的局限性,使得它的适用范围大受限制。那我们在什么情
况下使用结构才能不受指责和嘲笑呢?
1、如果你正在从事图像色彩或是固定模式的业务处理程序的设计,或者你在设计对象群时,需要面对大量结构简单且状态
信息比较少的对象时,我建议你最好选用结构类型来构造这些小规模数据体。
2、由于结构的原型是值类型,所以它整个被定义为一个数据,所以不要试图在结构里构造过多的方法,最好是能不定义方
法,就尽量避免。

我们来看以下微软提供的一个最具代表性的例子: RGB结构
using System;

/// <summary>
/// RGB结构
/// </summary>
struct RGB
{
public static readonly RGB RED = new RGB(255,0,0);
public static readonly RGB GREEN = new RGB(0,255,0);
public static readonly RGB BLUE = new RGB(0,0,255);
public static readonly RGB WHITE = new RGB(255,255,255);
public static readonly RGB BLACK = new RGB(0,0,0);

public int Red;
public int Green;
public int Blue;
public RGB(int red,int green,int blue)
{
Red = red;
Green = green;
Blue = blue;
}
public override string ToString()
{
return (Red.ToString("X2") + Green.ToString("X2") + Blue.ToString("X2"));
}
}

public class Struct
{
static void OutPutRGBValue(string color,RGB rgb)
{
Console.WriteLine("The Value for {0} is {1}",color,rgb);
}

static void Main(string[] args)
{
OutPutRGBValue("red",RGB.RED);
OutPutRGBValue("green",RGB.GREEN);
OutPutRGBValue("blue",RGB.BLUE);
OutPutRGBValue("white",RGB.WHITE);
OutPutRGBValue("black",RGB.BLACK);
}
}
以上的例子中我们定义了一个结构和静态字段,这样做使我们存储的效率提高了;使用上又方便了用户,毕竟记住一个
RGB(255,100,255) 要比记住一个“草浅兰” 要困难的多;由于静态成员的加盟,使得每个RGB键值对于整个系统只用定义
一次,这样使用起来其高效性和方便性都是显而易见的。

时间: 2024-11-05 14:40:43

关于C#中的结构(下)的相关文章

调整SQLServer2000运行中数据库结构

server|sqlserver|数据|数据库|数据库结构  开发过程中的数据库结构结构,不可避免的会需要反复的修改.最麻烦的情况莫过于开发者数据库结构已经修改,而实际应用中数据库又有大量数据,如何在不影响数据库中数据情况下,更新数据结构呢?当然,我们可以手工对应用数据库表结构各个添加.更正.删除的字段一一调整,这对一两个字段来说,是比较简单的,如果改动比较大的时候,这个过程将是非常繁琐的.本文意在介绍使用SQLServer2000 T-SQL语句进行数据库结构调整,希望能够给各位带来些方便.下

ongo 数组删除 pull-Mongo中数组结构的删除

问题描述 Mongo中数组结构的删除 20C 有这样一个Mongo的结构,{_id"" : ""classone""students"" : [ {name"" : ""liming""age"":23 } {name"" : """"jim""age"&qu

Android 中美腻的下划线

本文讲的是Android 中美腻的下划线, 在过去两年里,我经常发现一些尝试去如何提高有关在网页中渲染下划线文本修饰的文章和库.此类问题也同样发生在Android(平台):下划线的文本修饰与降部相交.比较下Android当前如何绘制下划线文本(上图)以及它的替代方案(下图): 你更喜欢哪一种? 尽管我完全认可这些努力,但是我从未喜欢过任何公开的解决方法.目前最新的技术(追求艺术般的状态)-毫无疑问地会强迫开发者们受限于CSS-似乎是通过绘制线性渐变以及多重阴影(我见过多达12层的!)来实现的.这

探讨系统管理员日常事务工作中的安全问题(下)

8.增加,删除,移走用户 (1)增加用户增加用户有三个过程:. 在/etc/passwd文件中写入新用户的入口项.. 为新登录用户建立一个HOME目录.. 在/etc/group中为新用户增加一个入口项. 在/etc/passwd文件中写入新的入口项时,口令部分可先设置为NOLOGIN,以免有人做为此新用户登录.在修改文件前,应mkdir /etc/ptmp,以免他人同时修改此文件.新用户一般独立为一个新组,GID号与UID号相同(除非他要加入目前已存在的一个新组),UID号必须和其他人不同,H

JS 实现导航菜单中的二级下拉菜单的几种方式_javascript技巧

最近整理了, JS 实现导航菜单中的二级下拉菜单的三种方式,便于项目中应用.  如何实现导航菜单栏中的二级下拉菜单? 我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margi

JS中用三种方式实现导航菜单中的二级下拉菜单_javascript技巧

我们在淘宝.搜狐等大型网站上都可以看到使用的一些二级下拉菜单,比如下面这张图片.那么如何实现导航菜单栏中的二级下拉菜单?下面小编给大家分享实现思路. 但是如何实现类似的图片呢?实际上,我们有至少三种方式来实现,下面,我附上代码供大家参考. 1.仅使用html和css <meta charset="UTF-8"> <title>Document</title> <style> *{margin:0;padding: 0;list-style

sizeof-nginx中ngx_buf_t结构体

问题描述 nginx中ngx_buf_t结构体 ngx_buf_t中的last成员到底指向哪里? ngx_buf_t *b = ngx_pcalloc(r-pool, sizeof(ngx_buf_t)); b->start = (u_char*) ngx_pcalloc(r->pool, 128); b->last = b->start; b->end = b->last + 128; 我觉得end成员指向的是待处理内存区的下一个地址,它并不包含在待处理内存区中...

调整SQLServer2000运行中数据库结构_MsSql

开发过程中的数据库结构结构,不可避免的会需要反复的修改.最麻烦的情况莫过于开发者数据库结构已经修改,而实际应用中数据库又有大量数据,如何在不影响 数据库中数据情况下,更新数据结构呢?当然,我们可以手工对应用数据库表结构各个添加.更正.删除的字段一一调整,这对一两个字段来说,是比较简单的,如 果改动比较大的时候,这个过程将是非常繁琐的.本文意在介绍使用SQLServer2000 T-SQL语句进行数据库结构调整,希望能够给各位带来些方便.下面以现有数据库表HR_User为例,讲解如何进行这类操作.

Python中Django框架下的staticfiles使用简介

  这篇文章主要介绍了Python中Django框架下的staticfiles使用简介,staticfiles是一个帮助Django管理静态资源的工具,需要的朋友可以参考下 django1.3新加入了一个静态资源管理的app,django.contrib.staticfiles.在以往的django版本中,静态资源的管理一向都是个问题.部分app发布的时候会带上静态资源文件,在部署的时候你必须手动从各个app中将这些静态资源文件复制到同一个static目录.在引入staticfiles后,你只需