using语句

西关荣大少 2010-04-29 04:23:11
using除了命名空间之外,还可以直接使用,想问一下各位using语句怎样使用的?
例如
if (!File.Exists(textBox1.Text))
{
// using ( StreamWriter sw = File.CreateText(textBox1.Text) )
StreamWriter sw = File.CreateText(textBox1.Text);
sw.WriteLine(textBox2.Text);

MessageBox.Show("文件创建成功");

}
这样是可以正常使用,但如果我把using语句去掉的话
if (!File.Exists(textBox1.Text))
{
StreamWriter sw = File.CreateText(textBox1.Text);
StreamWriter sw = File.CreateText(textBox1.Text);
sw.WriteLine(textBox2.Text);

MessageBox.Show("文件创建成功");

}
结果则只会看到新建的文件,但要写入文件的东西却看不到
...全文
665 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
HamasN 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peter200694013 的回复:]
引入名空间
eg: using System;
定义别名
eg: using zhengshu = System.Int32;
在using中创建对象
eg:
using(SqlConnection conn = new SqlConnection())
{

}//出了{}conn就释放了
[/Quote]
言简意赅!学习了!
冰糖-雪梨 2010-06-13
  • 打赏
  • 举报
回复
using(Sqlconnection con=new Sqlconnection(str))
{

}
作用:

自动释放
yufenghua 2010-05-02
  • 打赏
  • 举报
回复
using 关键字有两个主要用途:

作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。。

作为语句,用于定义一个范围,在此范围的末尾将释放对象。
msdn....


rizher 2010-05-02
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!
qwerrewq888 2010-05-02
  • 打赏
  • 举报
回复
学习了。
studentliudong 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 gohappy2008 的回复:]
(1)引用命名空间


using作为引入命名空间指令的用法规则为:

using Namespace;

在.NET程序中,最常见的代码莫过于在程序文件的开头引入System命名空间,其原因在于System命名空间中封装了很多最基本最常用的操作,下面的代码对我们来说最为熟悉不过:

using System;

这样,我们在程序中就可以直接使用命名空间中的类型,而不必……
[/Quote]


学习了~~
celeron729 2010-05-02
  • 打赏
  • 举报
回复
路过,学习
jianqifeihong 2010-05-02
  • 打赏
  • 举报
回复
using {}是一个语句块,在里面的临时变量只有出了}就被自动被自动垃圾清理集清除了
  • 打赏
  • 举报
回复
^
[Quote=引用 2 楼 peter200694013 的回复:]
引入名空间
eg: using System;
定义别名
eg: using zhengshu = System.Int32;
在using中创建对象
eg:
using(SqlConnection conn = new SqlConnection())
{

}//出了{}conn就释放了
[/Quote]
hhwydwfg 2010-05-02
  • 打赏
  • 举报
回复
ddd
lpingz 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 skydragonking 的回复:]
但是我自己并没有继承IDispose,为什么也可以用using语句呢?
[/Quote]
很多东西都是编译替人完成的.
leon9090 2010-05-02
  • 打赏
  • 举报
回复
释放资源。。。。
vbmscomm 2010-05-02
  • 打赏
  • 举报
回复
像写SQL语句要 .CLOSE吧如果用USING就不需要.CLOSE了
西关荣大少 2010-05-01
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 c520120 的回复:]
只要对象继承IDispose接口接可以使用using
使用using 相当于在using结束后自动调用 对象.Dispose()
[/Quote]
但是我自己并没有继承IDispose,为什么也可以用using语句呢?
HunterWay 2010-04-30
  • 打赏
  • 举报
回复
学习下下。。。
wangwenzhuang 2010-04-30
  • 打赏
  • 举报
回复
using执行自动释放的,凡是实现IDisposable接口的类可以使用using
你的那段代码不用using没有写入文本是因为你没有关闭流sw.Close(),所以不能写入文件,使用using会自动调用sw.Close()
codeingsky 2010-04-30
  • 打赏
  • 举报
回复

using{}释放资源外,里面的对象有使用周期的,

1: using ( StreamWriter sw = File.CreateText(textBox1.Text) )
{
StreamWriter sw = File.CreateText(textBox1.Text);
sw.WriteLine(textBox2.Text);
}

2:StreamWriter sw = File.CreateText(textBox1.Text);
sw.WriteLine(textBox2.Text);

这个区别你现在应该明白了吧,你在2后面加一个Save方法后,也就能看见你添加的数据,但是不如1方法
walkghost 2010-04-30
  • 打赏
  • 举报
回复
我是这样用using写日志的:

/// <summary>
/// 出错之后计入日志文件
/// </summary>
/// <param name="e2">Exception</param>
public static void WriteExceptionLog(Exception e2)
{
//如果是同一天的话,则打开文件在末尾写入。如果不是同一天,则创建文件写入文件
//新建文件
//写入文件
if (!Directory.Exists("logs"))
{
Directory.CreateDirectory("logs");
}
//判断是否存在文件
if (File.Exists("logs/" + DateTime.Now.ToString("yyyyMMddHH") + "Exception.log"))
{
//如果存在文件,
using (StreamWriter sw = new StreamWriter("logs/" + DateTime.Now.ToString("yyyyMMddHH") + "Exception.log", true))
{

lock (sw)
{
sw.WriteLine("============================================================================");
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":");
sw.WriteLine(e2.ToString());
sw.Close();
sw.Dispose();
}
}
return;

}
using (StreamWriter sw2 = new StreamWriter("logs/" + DateTime.Now.ToString("yyyyMMddHH") + "Exception.log", true))
{
lock (sw2)
{
sw2.WriteLine("============================================================================");
sw2.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":");
sw2.WriteLine(e2.ToString());
sw2.Close();
sw2.Dispose();
}
}

}//日志文件结束
lyq7611007 2010-04-30
  • 打赏
  • 举报
回复
其实和desponse差不多
gohappy2008 2010-04-30
  • 打赏
  • 举报
回复
(1)引用命名空间


using作为引入命名空间指令的用法规则为:

using Namespace;

在.NET程序中,最常见的代码莫过于在程序文件的开头引入System命名空间,其原因在于System命名空间中封装了很多最基本最常用的操作,下面的代码对我们来说最为熟悉不过:

using System;

这样,我们在程序中就可以直接使用命名空间中的类型,而不必指定详细的类型名称。using指令可以访问嵌套命名空间。


关于:命名空间

命名空间是.NET程序在逻辑上的组织结构,而并非实际的物理结构,是一种避免类名冲突的方法,用于将不同的数据类型组合划分的方式。例如,在.NET中很多的基本类型都位于System命名空间,数据操作类型位于System.Data命名空间,

(2)创建命名空间别名


using为命名空间创建别名的用法规则为:

using alias = namespace | type;

其中namespace表示创建命名空间的别名;而type表示创建类型别名。例如,在.NET Office应用中,常常会引入Microsoft.Office.Interop.Word.dll程序集,在引入命名空间时为了避免繁琐的类型输入,我们通常为其创建别名如下:

using MSWord = Microsoft.Office.Interop.Word;

这样,就可以在程序中以MSWord来代替Microsoft.Office.Interop.Word前缀,如果要创建Application对象,则可以是这样,
而且还有一个好处就是,在一个.CS文件中引入了不同的命名空间但是相同的类名的时候,用别名就可以解决这问题了。

(3)强制资源清理
用途:清理非托管资源,不受GC控制的资源。Using结束后会隐式的调用Disposable方法。
用法:

using (Class1 c = new Class1())
{

}//清理非托管不受GC控制的资源 但是当对象使用using关键字的时候,必须实现IDisposable接口。其实using的使用和try-catch-finaly中,在finaly代码域调用Disposable方法效果一样。注意Using不能使用多个不同的类
Class1 f = new Class1();
try
{
//执行代码
}
catch()
{
//异常处理
}
finally
{
f.Disposable();
}
加载更多回复(31)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧