using的另一种用法

转载 2007年10月05日 16:58:00
 
先看下面的代码:
   using( Form_Arg arg=new Form_Arg(this.ip,this.port,this.limit) )
   {
       arg.Left = this.Left + 30;
       arg.Top  = this.Top + 25;
       arg.ShowDialog();
        arg.Get(out this.ip, out this.port, out this.limit);
   }

我以前经常使用“using System;“或者”using System.IO”等加入新Namespace, 上面的代码我没有使用过,不知道这段代码是什么意思,所以拜读MSDN,里面有下面的解释:
using
可以取得一个或者多个资源,执行一个陈述式(Statement),接着处置(Dispose)该资源.
using(
资源撷取) 内嵌陈述式
using(ResourceType resource = expression) statement

上面的解释已经很清楚的,using后面的括号里面写上资源的名字,程序处理资源里面的代码之后自动清除该资源,下面是msdn的范例:
范例将建立名称为log.txt的档案,并将两行文字写入档案内。接着,该范例就会开启相同的档案以读取所包含的文字行,并将文字行复制到主控台。
using System;
using System.IO;
 
class Test
{
    static void Main()
    {
        using (TextWriter w = File.CreateText("log.txt"))
        {
            w.WriteLine("This is line one");
            w.WriteLine("This is line two");
        }
        using (TextReader r = File.OpenText("log.txt"))
        {
            string s;
            while ((s = r.ReadLine()) != null)
            {
                Console.WriteLine(s);
            }
        }
    }
}
因为TextWriterTextReader类别会实作IDisposable接口,因此,这项范例可以使用using陈述式以确认已经正确地关闭在写入或读取作业后的基础档案。

下面是msdn的说明:
当您撰写使用封装资源之对象的程序代码时,您应该确定在使用完该对象时会呼叫对象的 Dispose 方法。您可以使用 C# using 陈述式,或其它适用于 Common Language Runtime 的程序语言中实作 try/finally 区块,来执行这个动作。
C# Using 陈述式
C# 程序语言的 using 陈述式会藉由简化您必须为建立和清除对象而撰写的程序代码,以较为自动的方式呼叫 Dispose 方法。Using陈述式会取得一项或多项资源、执行您指定的陈述式,然后处置该对象。请注意,using陈述式对于对象之存留期不超过建构该对象之方法的对象才有用。下列程序代码范例会建立并清除 ResourceWrapper 类别的执行个体,一如之前在 C# 实作 Dispose 方法范例中所提供的说明。
class myApp
    {  
        public static void Main()  
        {     
            using (ResourceWrapper r1 = new ResourceWrapper())     
            {        
                // Do something with the object.        
                r1.DoSomething();     
            }  
        }
}
前面含有 using 陈述式的程序代码,就相当于下列情形。
class myApp
    {  
        public static void Main()  
        {     
            ResourceWrapper r1 = new ResourceWrapper();      
            try     
            {        
                // Do something with the object.        
                r1.DoSomething();     
            }     
            finally     
            {        
                // Check for a null resource.        
                if (r1 != null)        
                    // Call the object's Dispose method.        
                    r1.Dispose();     
            }  
        }
    }


using 陈述式可取得一个或多个资源、执行一陈述式、接着处置 (Dispose) 该资源。
using 陈述式:
using   (    资源撷取   )    内嵌陈述式
资源撷取:
区域变量宣告
表达式
资源为实作 System.IDisposable 的类别或结构,它包含了名为 Dispose 的单一无参数方法。使用资源的程序代码可呼叫 Dispose 来指出该资源已不再需要。若未呼叫 Dispose,最后将由于内存回收而发生自动的处置。
资源撷取的形式为区域变量宣告,那么区域变量宣告的型别必须为 System.IDisposable 或可隐含转换成 System.IDisposable 的型别。如果资源撷取的形式为表达式,则此表达式必须为 System.IDisposable 型别或可隐含转换成 System.IDisposable 型别。
宣告于资源撷取的区域变量为只读,并需包含一个初始设定式。如果内嵌陈述式尝试修改这些区域变量 (透过设定或 ++ 和 -- 运算子),或将它们当成 ref 或 out 参数传递,就会发生编译时期错误。
using 陈述式将转译成三个部分:撷取、使用方式和处置。资源的使用方式将隐含地包含于具有 finally 子句的 try 陈述式内。此 finally 子句会处置这些资源。若取得 Null 资源,则不会呼叫 Dispose,也不会掷回任何例外状况。
下列形式的 using 陈述式
using (ResourceType resource = expression) statement
对应到两个可能展开中的其中一个。当 ResourceType 为数值型别时,展开为
{
                ResourceType resource = expression;
                try
                {
                    statement;
                }
                finally
                {
                    ((IDisposable)resource).Dispose();
                }
}
否则,当 ResourceType 为参考型别时,展开为
{
                ResourceType resource = expression;
                try
                {
                    statement;
                }
                finally
                {
                    if (resource != null) ((IDisposable)resource).Dispose();
                }
 }
在任何一种展开中,在内嵌陈述式中的 resource 变数都是只读的。
下列形式的 using 陈述式
using (expression) statement
拥有相同的两种可能展开,但在此状况中,ResourceType 为 expression 的隐含编译时期型别,而在内嵌的陈述式中无法存取 resource 变量,而且它也是不可见的。
资源撷取采取区域变量宣告的形式,就可能取得特定型别的多重资源。下列形式的 using 陈述式
using (ResourceType r1 = e1, r2 = e2, ..., rN = eN) statement
完全等于一序列巢状的 using 陈述式:
using (ResourceType r1 = e1)  
using (ResourceType r2 = e2)     
...        
using (ResourceType rN = eN)           
        statement
 
 

C++中的命名空间、using用法、区域运算符(::)详解

大家好!逗比老师又来给大家逗比啦!今天我们来逗比的内容,是C++中特别特别特别**疼的内容,这部分内容尤其对于C程序员、OC程序员来说尤为费解。那么废话不多说,我们先来进入第一个内容——命名空间。 ...
  • fl2011sx
  • fl2011sx
  • 2016年05月03日 23:43
  • 3031

C# 中使用using的三种方法

C# 中使用using的三种方法 1.using指令 using+命名空间,这种方法基本学习过C#的都用过,好处在于,写代码的时候不需要指定详细的命名空间 using System.Wi...
  • chenyq2008
  • chenyq2008
  • 2014年11月21日 08:35
  • 5163

C#中Using用法

之前学习wcf写了个例子,里面有一个using(){}的句子。原来using除了引用命名空间外还可有其他作用。 using这个关键字在C#中共用三个用法:    1、用在命名空间里    如:u...
  • mayfla
  • mayfla
  • 2015年08月01日 21:51
  • 1208

c++11中的using关键字

一般的using关键子我们都是用来声明当前文件的命名空间,比如标准库的命名空间std-> using namespace std; 但在c++11中,它的用处还有几个 1:取代typedef  ,2...
  • yangxuan0261
  • yangxuan0261
  • 2015年11月29日 15:20
  • 8931

Oracle中Using用法

1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外...
  • robertkun
  • robertkun
  • 2013年08月29日 22:50
  • 15477

C#中using的几种用法

前言          在学习C#中我们开头就看见命名空间namespace这显示很多using,对于这个不是怎么了解。看着一行行的,不带重复的。一次就跟着一个命名,就在百度里查了查这到底是啥意思?就...
  • z15732621582
  • z15732621582
  • 2016年01月31日 08:40
  • 730

[C++]using语义使用说明

using语义使用说明1. 引入命名空间 using namespce std; 但实际上在真正做工程时是不允许使用这种方法的。更常见的方法应该是:using std::cout; using ...
  • stary_yan
  • stary_yan
  • 2016年05月21日 08:48
  • 396

vb.net的using用法

今天看到了一位朋友对using的讲解 因此也对它有了一定的了解 特此把他的文章转载过来 ,方便以后查看   ------------------------------------------...
  • u010052030
  • u010052030
  • 2013年10月06日 09:48
  • 4180

oracle使用using关键字

oracle使用using关键字 sql/92标准可以使用using关键字来简化连接查询,但是只是在查询满足下面两个条件时,才能使 用using关键字进行简化。 1.查询必须是等值连接。 2.等值连...
  • qq_20545159
  • qq_20545159
  • 2015年03月23日 11:35
  • 908

oracle using 和on的用法不同处

using 在两个表的字段相同但是
  • u012292087
  • u012292087
  • 2013年10月03日 15:43
  • 1287
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:using的另一种用法
举报原因:
原因补充:

(最多只允许输入30个字)