什么是C#使用框为什么我应该使用它吗?[重复]
-
03-07-2019 - |
题
这个问题已经有一个答案在这里:
- 是什么使用的"使用"在C# 29的答案
是什么目的使用的框在C#?它是如何不同,从一个地方变量?
解决方案
如果该类型实现IDisposable,这自动处理它。
鉴于:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
这些都是等同的:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
第二是更容易阅读和维护。
其他提示
Using
电话 Dispose()
后 using
-块左,即使码扔出一个例外。
所以你通常的使用 using
课程需要清理后他们,就像IO.
所以,使用这块:
using (MyClass mine = new MyClass())
{
mine.Action();
}
会做同样的为:
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
使用 using
是的方式更短和更容易阅读。
从MSDN:
C#通过。净共同框架 语言运行(CLR),自动 版本的存储器可用来存储 对象不再需要。在释放记忆 非确定性;存储器被释放 每当CLR决定执行 垃圾收集。然而,它是 通常最好放限制 资源,如文件处理和 网络连接的尽快 可能的。
所使用的声明的允许 程序员指定对象时 使用资源应该释放 它们。对象提供的使用 声明必须实现的 IDisposable接口。这个界面 提供的处理方法,该方法 应该释放对象的资源。
换句话说, using
声明的告诉。净释放的对象的指定 using
方框一旦它不再需要。
所使用的语句被用来作用的对象在C#实现 IDisposable
接口。
的 IDisposable
接口有一个公共的方法称为 Dispose
那是用来处置的对象。当我们使用的用语句,我们不需要明确处理的对象在代码中,使用声明需要照顾它。
using (SqlConnection conn = new SqlConnection())
{
}
当我们使用上述方框内的代码是产生这样的:
SqlConnection conn = new SqlConnection()
try
{
}
finally
{
// calls the dispose method of the conn object
}
更多详细信息: 了解使用声明在C#.
还注意到,目实例通过 using
是的只读内使用区块。请参阅官方C#参考 在这里,.
把代码中使用框确保对象是设置的(尽管不一定收集)尽快控制离开块。
using (B a = new B())
{
DoSomethingWith(a);
}
相当于
B a = new B();
try
{
DoSomethingWith(a);
}
finally
{
((IDisposable)a).Dispose();
}
这是真的只是一些syntatic糖不需要你到明确呼吁在处理各位成员,执行IDisposable.
所使用的声明获得一个或更多的资源,执行一个发言,然后处置的资源。