Krz*_*nek 11 c# resharper virtual object tostring
在StringWriter(mscorlib.dll)中我找到了一个代码:
private StringBuilder _sb;
// (...)
public override string ToString()
{
return ((object) this._sb).ToString();
}
Run Code Online (Sandbox Code Playgroud)
我没有看到原因(我的R#也是如此,但它有时是错误的).ToString()是virtual如此铸造不会改变行为.
这里做了什么样的优化?
没有任何区别,也没有优化。生成的 IL(带强制转换和不带强制转换)完全相同。事实上,当用 Reflector 打开 mscorlib 时,它只显示return this._sb.ToString();.
正如你所说,ToString()is ,并且在 中virtual没有被标记,所以生成的IL在任何情况下都引用(最初声明的方法)(除了一些基本值类型):newStringWriterObject.ToString()
ldfld class System.Text.StringBuilder System.IO.StringWriter::_sb
callvirt instance string System.Object::ToString()
Run Code Online (Sandbox Code Playgroud)
即使查看CLI 2.0源代码,代码如下:
public override String ToString() {
return _sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
根据 Reflector 的说法,唯一的区别StringBuilder.ToString()是unsafe。IL 中没有针对此的关键字,但可以通过检查不安全指令来找到它。R# 可能会认为这是一个差异(尽管事实并非如此)并且更喜欢明确地表达出来。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |