小编PRR*_*PRR的帖子

C#:using block:对象重新初始化

在"使用"块内重新初始化是一个坏主意,在任何时候都要避免.我还是会问这个:

为什么"使用"调用处理原始值而不是最后一个引用或重新初始化(如果使用try finally block则会发生这种情况)

MyClass b = new MyClass();// implements Idisposable
MyClass c = new MyClass();
MyClass a ; 

 using (a = new MyClass())
 {
                a = b;
                a = c;
 }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,dispose将在原始引用上调用,而不是在引用时更新.这可以通过在dispose方法中在控制台上打印一些内容来轻松验证.

然而,使用try {} finally代码调用最后一个引用dispose方法.

try
{
   a = new MyClass();
   a = b;
   a = c;
 }
  finally 
   {
   a.Dispose();
  }
Run Code Online (Sandbox Code Playgroud)

MSDN:using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}
Run Code Online (Sandbox Code Playgroud)

基本上"使用"转换为:

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset …
Run Code Online (Sandbox Code Playgroud)

c# using

5
推荐指数
2
解决办法
1040
查看次数

标签 统计

c# ×1

using ×1