在using中创建的对象的类必须是实现了IDispose接口的类,示例代码如下:

static void Main(string[] args)
{
Method();
Console.WriteLine("OkMain");
Console.ReadKey();
} public static void Method()
{
using(var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass"))
{
cnt.Open();
}
Console.WriteLine("OkMethod");
}

网上很多人说:

using(var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass"))

{

cnt.Open();

}

Console.WriteLine("MethodOk");

就相当于

var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass");

try{

cnt.Open();

}finally

{

cnt.Close();

}

Console.WriteLine("MethodOk");

对于上面的代码我的理解是:

很明显,如果var cnt = new SqlConnection("server=192.168.0.111;database=TestDb;uid=sa;pwd=pass");出现异常,肯定会抛给此函数的上级函数,故后面的代码均不执行

然后,由于上面的try-finally没有catch部分,故它只有异常监测能力,而没有手动的异常捕获能力。

故如果cnt.Open();出现异常,则首先进入finally中执行cnt.Close();然后将此异常抛给此函数的上级,故Console.WriteLine("MethodOk");也不会执行

如果此函数的上级函数没有手动捕获这个函数,则该上级函数的调用此函数代码的后面代码也不会执行,且继续将异常往上上级函数抛(但异常Trace信息应该是有更新的)。

C#基础在using中创建对象的更多相关文章

  1. Java中创建对象的内存图

    所有人都知道面向对象思想,Java中的对象的创建在内存中是如何创建的,传智播客的视频看了一遍,把一些讲解的比较清晰的内容记录下来,方便记忆的更加深刻,Java中创建对象的过程,首先要理解JVM中栈.堆 ...

  2. Java基础之String中equals,声明方式,等大总结

    无论你是一个编程新手还是老手,提到String你肯定感觉特别熟悉,因为String类我们在学习java基础的时候就已经学过,但是String类型有我们想象的那么简单吗?其实不然,String类型的知识 ...

  3. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  4. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  5. javascript中创建对象的方式总结

    javascript中创建对象的方式总结 具体代码如下: //创建对象的方式: //创建方式一 var person=new Object(); person.name='jack'; person. ...

  6. java中需要关注的3大方面内容/Java中创建对象的几种方法:

    1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...

  7. anjular中Service、Factory、Provider的使用与js中创建对象的总结

    在学习anjular中Service的使用时,发现和js中的创建对象的方式有一定的联系,所以总结了anjular中Service.Factory.Provider的使用方式与js创建对象的方式 一.先 ...

  8. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  9. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

随机推荐

  1. P2757 导弹的召唤(数据加强)

    传送门 LIS的O(nlgn)模板题.加强"导弹拦截" #include <cstdio> #include <cstring> #include < ...

  2. 解决ubuntu无法远程连接

    在装Ubantu的时候可能有的小伙伴忽略了一点,忘记了在一个地方打一下空格,导致后面无法远程连接. 如果能在这里打上对勾就可以不用后面的操作了. 首先要切换到root账号 sudo passwd ro ...

  3. win10下Anaconda 2 和 3 共存安装,并切换jupyter notebook和Pycharm中的对应版本

    win10下Anaconda 2 和 3 共存安装,并切换jupyter notebook和Pycharm中的对应版本 zoerywzhou@163.com http://www.cnblogs.co ...

  4. JavaScript各种继承方式和优缺点

    好久没写博客啦,嘻嘻,这个月是2017年的最后一个月啦,大家应该都开始忙着写年终总结了吧,嘻嘻,小颖今天给大家分享下Javascript中的几种继承方式以及他们的优缺点. 1.借助构造函数实现继承 原 ...

  5. Emrips 反质数枚举 javascript实现

    今天看到一个kata,提出一个"emirps"的概念:一个质数倒转后得到的是一个不同的质数,这个数叫做"emirps". 例如:13,17是质数,31,71也是 ...

  6. codeforces #446 892A Greed 892B Wrath 892C Pride 891B Gluttony

    A  链接:http://codeforces.com/problemset/problem/892/A 签到 #include <iostream> #include <algor ...

  7. 魔术常量(Magic constants)

    魔术常量(Magic constants) PHP中的常量大部分都是不变的,但是有8个常量会随着他们所在代码位置的变化而变化,这8个常量被称为魔术常量. __LINE__,文件中的当前行号 __FIL ...

  8. Openssl 生成证书server.key and server.crt

    1.key的生成 openssl genrsa -des3 -out server.key 2048 这样是生成rsa私钥,des3算法,openssl格式,2048位强度.server.key是密钥 ...

  9. Java 代码质量

    被滥用的instanceof instanceof滥用, 或者直接强转, 大都数情况可以用方法override, 而且应当避免使用isA(), isB()之类的写法; 比如sonA和sonB都继承自p ...

  10. 【练习】HTML+CSS

    作业要求1 京东首页轮播图,效果如下 <!DOCTYPE html> <html lang="en"> <head> <meta char ...