zoukankan      html  css  js  c++  java
  • C#基础:在using中创建对象

    在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信息应该是有更新的)。

  • 相关阅读:
    Mysql 主备原理
    Mysql-innodb日志写入时机
    Innodb 架构
    Reactor/Proactor
    select,poll,epoll,IO多路复用进化史
    从硬件+操作系统的角度解释为什么操作系统的IO单位是磁盘块
    Dubbo 核心功能在业务架构中的体现
    Mysql-Innodb 锁总结
    第一阶段冲刺三
    第一阶段冲刺二
  • 原文地址:https://www.cnblogs.com/silentdoer/p/6296249.html
Copyright © 2011-2022 走看看