C#语言中为什么在如下的语句中需要使用using?using是什么意思啊?

作者&投稿:贝之 (若有异议请与网页底部的电邮联系)
c#里的USING语句是什么意思~

使用using语句最终生成的其实是一个try, finally代码块,在finally代码块里释放资源。要求是:为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。

你的问题其实可以这样解释:

在using中其实打开了一个数据库连接,然后从数据库中读取了某些数据,最后不管读取是否成功,都应该把这个数据库连接关闭掉。
传统的写法应该是在try块里打开连接并且读取,在finally块中把连接关闭掉,而由于你的sdr对象实现了IDisposable接口,所以C#允许你用using语句来代替这种写法,其实这就是一种语法糖,一种简便写法而已。
当程序运行完这个代码块(超出大括号的范围)后,sdr就会被自动关闭掉。

楼上的兄弟回答出来了命名空间的解释
只是搞错了一点
using System;
是有含义的,因为系统里有很多方法都在这个命名空间里,最常用的有Console这个了,所以必须要导入,不然的话你需要在这些方法前面全部加上
记住,不仅仅是你简单看到的,还有很多隐藏的也要加上,呵呵!

using 语句定义一个范围,在此范围的末尾将处理对象。

using (expression | type identifier = initializer) statement
其中:

expression
希望在退出 using 语句时调用 Dispose 的表达式。
type
identifier 的类型。
identifier
type 类型的名称或标识符。定义一个以上 type 类型的 identifier 是可以的。在每一个 identifier = initializer 的前边都有一个逗号。
initializer
创建对象的表达式。
statement
嵌入的语句或要执行的语句。
备注
在 using 语句中创建一个实例,确保退出 using 语句时在对象上调用 Dispose。当到达 using 语句的末尾,或者如果在语句结束之前引发异常并且控制离开语句块,都可以退出 using 语句。

实例化的对象必须实现 System.IDisposable 接口。

示例
// cs_using_statement.cs
// compile with /reference:System.Drawing.dll
using System.Drawing;
class a
{
public static void Main()
{
using (Font MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f))
{
// use MyFont and MyFont2
} // compiler will call Dispose on MyFont and MyFont2

Font MyFont3 = new Font("Arial", 10.0f);
using (MyFont3)
{
// use MyFont3
} // compiler will call Dispose on MyFont3

}
}
更多的了解请连接http://apps.hi.baidu.com/share/detail/2835169

using 指令定义一个作用域范围, 当作用域内部的代码执行完毕时,using会自动销毁在作用域创建的所有对像并释放资源

sr.Close();必须写在using作用域内,因为此对像是在using作用域中创建的

因为using会自动销毁对像并释放资源,所以sr.Close()方法可以不用写

我就事论事了,这里的using是让StreamReader这个读写器在使用完后,即在语句块结束后,释放掉StreamReader的所占用的资源,这种用法还是很普遍的,当你要事先实现IDisposable这个接口才行。

释放资源


顺庆区15329928458: C# SQL 语句中为什么加“@” -
局媛勒通: 1搂的理解错了,你说的那个@,其实是告诉它这是参数,你注意看后面的语句,肯定还有SqlParameter这个对象,有几个@就有几个这个,这样做的好处一个是安全,防止SQL注入,另外就是代码看起来比较整洁,经常性的拼接字符串会大大降低代码的可读性

顺庆区15329928458: 在c#语言有这么一段代码,为什么要创建一个有参数和一个无参数的呢? 还有构造函数的形参传递给类成员 -
局媛勒通: 如果没有无参数构造函数,下面创建空对象new student()创建不了,有参数的创建非空对象

顺庆区15329928458: C#语言中如下语句中方括号有什么作用? -
局媛勒通: 方括号里面放属性.用来说明后面的方法或者类的特殊属性.DllImport是说明需要调用动态链接库.

顺庆区15329928458: C#中foreach语句的作用? -
局媛勒通: C#中foreach在书写上比for简单得多,作用是遍历数组的全部元素,但是没有循环变量,需要控制循环次数或记录循环次数的地方不如for. 具体使用参考代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17usingSystem; publicclassjb51demo ...

顺庆区15329928458: 谁能告诉我C#中定义一个事件为什么需要一个委托啊 -
局媛勒通: 事件是建立在委托的模型之上,事件是委托的一个应用,归根结底强大的还是委托:委托可认为是一类方法的抽象,这类方法具有相同的签名:参数和返回值类型相同;委托有4个应用:1更加灵活的方法调用2用于异步回调3多线程编程时,用委...

顺庆区15329928458: C#中的几种跳转语句 -
局媛勒通: 使用跳转语句执行分支,该语句导致立即传递程序控制.跳转语句中使用下列关键字:breakcontinuegotoreturn //--------------------------------------------------------------------------- break 语句终止它所在的最近的封闭循环或 switch 语句.控制传递给终止语句...

顺庆区15329928458: C#语言中,这个实例化是什么意思?为什么要赋值个null? -
局媛勒通: 因为C#函数内部如果不赋值就引用的话编译会报错,赋值为nul只是为了让编译通过而已.

顺庆区15329928458: C#中的switch语句详解 -
局媛勒通: switch 语句是一个控制语句,它通过将控制传递给其体内的一个 case 语句来处理多个选择和枚举.例如:int caseSwitch = 1; switch (caseSwitch) {case 1:Console.WriteLine("Case 1");break;case 2:Console.WriteLine("Case 2");...

顺庆区15329928458: C#语句问题,请问这句为什么要写成静态的? -
局媛勒通: 1.写成静态的 有什么作用? 写成静态的,主要的好处是,类名.select(strsql);即可调用,非常方便,不需要先实例化对象,然后,对象名.方法;2.写成非静态的就需要实例化了吗? 实例化是什么?实例化就是:调用构造函数给类对象赋值,如...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网