我只是看一个例子,在其中我看到了代码
return new IntPtr(handle);
Run Code Online (Sandbox Code Playgroud)
在探索我们的代码之后,我发现我们已经使用了类似的模式,但在我们的代码中我们几乎有相同的东西:
return (IntPtr)handle;
Run Code Online (Sandbox Code Playgroud)
这两种情况有区别吗?第二个是否会以任何方式"更好",因为它不会分配新的内存,或者只是隐藏相同的构造函数?
在你的例子中,我猜测句柄是一个整数值?IntPtr声明从Int32(int)和Int64(long)的显式转换,它只是调用相同的构造函数:
public static explicit operator IntPtr(int value)
{
return new IntPtr(value);
}
Run Code Online (Sandbox Code Playgroud)
因此除了可能的可读性问题之外,实际上没有区别.
反射器说,无论如何,演员都在调用引擎盖下的构造函数:
[Serializable, StructLayout(LayoutKind.Sequential), ComVisible(true)]
public struct IntPtr : ISerializable
{
...
[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public static explicit operator IntPtr(int value)
{
return new IntPtr(value);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |