SUMTEC -- There's a thing in my bloglet.

But it's not only one. It's many. It's the same as other things but it exactly likes nothing else...

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  205 随笔 :: 19 文章 :: 1629 评论 :: 9 Trackbacks

假设我有一个object类型的变量o,需要转化成string类型的变量s。那么请问下列方式当中的那一个方案更加有效率:

1、

= (string) o;

2、
= o.ToString();

相关提示:
1、(string) 强制转换对应一句IL语句castclass,在IL中大概表现为:
      L_0019: ldloc.0
      L_001a: castclass string
      L_001f: stfld string WindowsApplication1.Form1::testString

这样的形势,注意强制转换只增加L_001a这一句IL语句。

2、o.ToString() 实际上是调用了从object继承出来的ToString()虚函数,这一个虚函数在string类型里面被重写,代码如下:
public override string ToString()
{
      return this;
}
如果效率有差别,差别是多大呢?答案在于实践当中。
posted on 2004-10-27 16:30 Sumtec 阅读(989) 评论(4)  编辑 收藏 所属分类: .NET 技术内幕

评论

最近Sumtec表现实在神勇
  回复  引用    

#2楼  2004-10-27 16:38 Lostinet [未注册用户]
真有钻研精神啊。

不过我一般是用 (string)obj 的。因为要判断是不是 null 也很麻烦啊。
  回复  引用    

(string)o 可以得到一个引用,不一定能得到一串字符。o.ToString()大多返回一个字符串。结果似乎没有可比性。
  回复  引用    

#4楼  2004-10-28 10:03 twodays      
“o.ToString() 实际上是调用了从object继承出来的ToString()虚函数,这一个虚函数在string类型里面被重写,代码如下:”

不对,因为你的o这会儿本来类型就是object,而不是string,所以他调用的实际上应该是object的ToString方法里面的内容,经过Reflector查看,里面的内容是:
return this.GetType().FullName;


  回复  引用  查看    

#5楼  2004-10-28 10:20 小新0574      
同意twodays的看法
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: