利用自动类型转换存储string类型.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档