在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. C#基础在using中创建对象

    在using中创建的对象的类必须是实现了IDispose接口的类,示例代码如下: static void Main(string[] args) { Method(); Console.WriteLi ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. eclipse使用ctrl+shift+F格式化代码失效

    通常情况出现这种问题是组合快捷键和别的软件快捷键冲突了, 最常见的是和搜狗输入法冲突, 在设置中找到搜狗输入法然后把冲突的快捷键取消掉就可以了.

  2. 一个简单例子弄懂什么是javascript函数劫持

    javascript函数劫持很简单,一般情况下,只要在目标函数触发之前,重写这个函数即可. 比如,劫持eval函数的代码如下: var _eval=eval; eval=function(x){ if ...

  3. <c:forEach>取得集合数量

    这个问题曾经也困扰了我好久,不过以后都没有用过也都忘记了,不过今天在做项目 的时候又遇到了,花费了很久的时间都没有成功.也试了它的很多属性,例如:varStatus.last.${status.cou ...

  4. MeToo, one year on

    表示转折/让步关系:but, however, nevertheless, whereas, although, despite, in spite of, still 表示比较或对比关系:simil ...

  5. 【348】通过 Numpy 创建各式各样的矩阵

    参考:NumPy之array-一个程序媛的自我修养-51CTO博客 参考:numpy中数组和矩阵的区别 - jiangsujiangjiang的博客 - CSDN博客 一.使用系统方法 二.用指定的数 ...

  6. python的可变list和不可变tuple, dict和set

    list和tuple 在python中分为可变表和不可变表: 类型 名称 表示方法 可变 list [] 不可变 tuple () list list是可变表,list内部索引从0开始,正整数是正序的 ...

  7. spark性能调优 数据倾斜 内存不足 oom解决办法

    [重要] Spark性能调优——扩展篇 : http://blog.csdn.net/zdy0_2004/article/details/51705043

  8. 数学分析中jensen不等式由浅入深进行教学(转)

    中国知网:数学分析中Jensen不等式由浅入深进行教学

  9. Ubuntu下面网络固定ip

    https://jingyan.baidu.com/article/e5c39bf5bbe0e739d7603396.html

  10. Android中MD5加密

    最近项目中遇到MD5加密,代码很简单,又是死代码,不过要注意当长度不足32的时候要补个0.下面是具体代码,直接拷贝就能用. public static String getMD5(String str ...