- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用自动类型转换存储string类型
利用自动类型转换存储string类型
类型转换是我们最常用的功能。就像上战场用的枪一样,敌人用的冲锋枪,
自己手里就一把步枪,打起仗来始终有点不爽。
因此,基本功能的完善很重要。
通常情况下我们需要String类型转其它的基础类型。这时我们最常用的是Convert类。
比如:
1 Convert.ToInt32(23);
2 Convert.ToDouble(3.4);
3 Convert.ToDateTime(2014-4-4);
但是这个方法一旦出现转换失败将会非常影响程序的效率。
因此这种方式会更为合理:
1 int temp;
2 bool success= Int32.TryParse(23,out temp);
3 if(!success)
4 {
5 temp=0;
6 }
当然这种方式必须输入更多的代码,对于程序员来说有违人性,我也不想一个简单的转换就要输那么一堆代码。
宝宝表示很不高兴。
因此我自定义了一个StringContainer类型
复制代码
1 public struct StringContainer
2 {
3 public static readonly StringContainer Empty=new StringContainer();
4 public string value;
5 internal StringContainer(string value)
6 {
7 this.value = value;
8 }
9 }
复制代码
struct类型是为了让CLR能更快的清除string类型所占用的内存。当然在内存充足的情况下,class类型效率要更快一点。
其中定义的Empty静态成员也是为了减少内存占用。
public static readonly StringContainer Empty=new StringContainer();
而value是存储字符串用的。StringContainer是默认初始化函数。
而我们将添加以下函数实现String类型到StringContainer类型的转换。
1 public static implicit operator StringContainer(string value)
2 {
3 return new StringContainer(value);
4 }
有了以上函数,我们就可以这样写:
StringContainer str = 23;
下面我们将重写强制类型转换运算符,来实现String类型到Int32类型的自动转换。
1 public static implicit operator Int32(StringContainer stringContainar)
2 {
3 Int32 result;
4 Int32.TryParse(stringContainar.value, out result);
5 return result;
6 }
这个方法意思是说当编译器需要把该类型转为Int32时将会默认使用该函数进行转换。
1 StringContainer str = 23;
2 int num = str;
到底发生了什么呢?我们从IL上分析代码。
复制代码
// Method begins at RVA 0x2130
// Code size 20 (0x14)
.maxstack 1
.locals init (
[0] valuetype [NFinal4]System.StringContainer str,
[1] int32 num
)
IL_0000: nop
IL_0001: ldstr 23
IL_0006: call valuetype [NFinal4]System.StringContainer [NFinal4]System.StringContainer::op_Implicit(string)
IL_000b: stloc.0
IL_000c: ldloc.0
IL_000d: call int32 [NFinal4]System.StringContainer::op_Implicit(valuetype [NFinal4]System.StringContainer)
IL_0012: stloc.1
IL_0013: ret
复制代码
1.先将“23”推向栈顶。
2.然后调用以string为参数的初始化函数。
3.把str
您可能关注的文档
- 养生必知你身体里的十二节气.doc
- 典型调速器产品介绍.docx
- 冀教版五年级下实验.doc
- 其它建筑工期定额.doc
- 内墙一般抹灰的施工方法.docx
- 典型影像学片.docx
- 内墙抹灰技术交底529.doc
- 内外墙面抹灰技术交底.doc
- 关于青少年违法犯罪的成因与预防对策.doc
- 内控与风险习题.docx
- 2024年秋江苏开放大学马克思主义基本原理作业3答案.pdf
- 2024年秋江苏开放大学机械创新设计形考作业一答案.pdf
- 2024年秋江苏开放大学综合英语(基础)作业3答案.pdf
- 2024年秋江苏开放大学计算机应用基础第四次作业PowerPoint制作旅游相关的演示文稿.ppt
- 2024年秋江苏开放大学文献检索与论文写作 行政管理专业 公共服务外包对地方政府效率的影响研究.pdf
- 2024年秋江苏开放大学宪法学第三次作业答案.pdf
- 初中物理思维导图汇总.docx
- 2024年秋江苏开放大学电路分析基础第二次作业答案.pdf
- 2024年秋江苏开放大学数控机床及应用技术第二次作业答案.pdf
- 2024年秋江苏开放大学财务会计学第二次作业答案.pdf
最近下载
- 2024年4月广东深圳市光明区马田街道办事处招聘一般专干及笔试历年典型考题及考点剖析附答案带详解.docx
- 文秘技能大赛题库完整.pdf
- 建筑工程图集 07SJ504-1 隔断、隔断墙(一).pdf
- 班级管理方案和班委职责与班级管理条例(范本)合集.doc VIP
- 2025年广东省高中语文学业水平合格考试卷试题(含答案详解).pdf VIP
- 金融监管学银行监管讲义课件.pptx
- 高中体育与健康_篮球 传切配合 教学课件设计.ppt
- 二 《简单相信,傻傻坚持》(教学课件)-【中职专用】高二语文精讲课堂(高教版2023·职业模块).pptx VIP
- 人教版《劳动教育》九年级 劳动项目二《三餐有营养》课件.pptx
- 2024年中考语文一轮复习(全国)(老师用)议论文写作(练习).pdf VIP
文档评论(0)