C#基础在using中创建对象
2023-12-05 16:25:11
在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信息应该是有更新的)。
最新文章
- java-通过JDBC操作数据库
- FluentData(微型ORM)
- iredmail安装脚本分析(二)---get_all.sh 文件所在目录为PKGS
- pageX/Y, offset(), position(), scrollTop(), screenX/Y, clientX/Y, pageX/Y
- 第五百八十六天至第六百零五天 how ccan I 坚持
- Sprint回顾
- APP性能分析1
- 不学就吃亏的underscorejs类库学习示例 ——(集合篇)
- Python Tutorial 学习(九)--Classes
- My SQL和LINQ 实现ROW_NUMBER() OVER以及Fatal error encountered during command execution
- oracle至mysql该指南的数据模式()任意数据源之间的跨导应用
- 在Sublime Text3中运行PHP代码
- springmvc+mybatis 做分页sql 语句
- Error: Can't find Python executable, you can set the PYTHON env variable.
- Machine Learning - week 1
- 蓝桥杯练习系统—基础练习 sine之舞
- HTML网页背景图很长要有滚动条滑动
- Shell 脚本格式注意事项
- Session &; Cookie小知识~
- 深度学习中 Batch Normalization