【IT168 技术文档】.NET架构通过使用try/catch/finally来实现这个功能,但是许多开发者发觉反复输入这些语句是一件非常麻烦的事情。也有一些其他的方法可以解决这个繁琐的工作带来的困扰,但是仅仅适用于某些特定条件下。
对于using关键字的不同看法
如果你是用C#来开发,你就知道使用关键字,它可以使你的程序更简单的访问这些资源。例如,我如果需要声明一个网络的文本框控制,就需要输入一下语句:
System.Web.UI.WebControls.TextBox txtName;
另一方面,如果在代码最上方注明了使用的类型,就可以直接指定,而无需键入完整的路径,标注的类型状态可以是这样的:
Using System.Web.UI.WebControls;
如果标注类型使用上面的语句,那么就可以用下面的这条语句来代替上面第一条(System.Web.UI.WebControls.TextBox txtName; )语句:
TextBox txtName;
在C#里使用关键字。前面这个语句用于表明这段代码使用一个对象,在这段代码结束的时候,这个对象资源应该被释放掉。下面的代码给出了更好的范例:
Using (TestObject a = new TestObject()) {
// 使用对象
}
//调用释放对象的方法
在处理对象的时候,上面的代码比使用try/catch/finally 要简便的多:
try {
TestObject a = new TestObject();
// 使用对象
} catch (Exception e) {
// 处理异常
} finally {
TestObject.Dispose();
}
在这个语句中有一处警告,就是对象必须实现IDisposable这个接口。通过实现接口,你就为这种类型的实例分配它所需要的资源。
IDisposable
IDisposable接口定义了一个方法--一个释放方法--就是释放那些已被分配出去而并没有在使用的资源。如果你不想代码自动去调用一个不存在的方法,这个方法就显得非常有用。如果你对一个对象使用关键字,而此时还没有实现IDisposable接口,编译器就会返回错误信息。下面这个程序中使用的这个类就是实现IDisposable的代码:
public class TestObject: IDisposable {
public TestObject() {
// 构建代码
}
public void Dispose() {
// 清除管理的资源
component.Dispose();
// 你同时需要清楚没有管理的资源
// 下面一行用于从队列中清除对象,以阻止其进一步的执行
GC.SuppressFinalize(this);
}
}
当你开发你自己的类的时候上面的语句才会派上用场,但是许多类已经具备上述的功能了。一个很好的例子就是与数据库连接在一起运行。
范例
数据是企业活力的源泉,几乎所有的应用程序都连接到了后方的数据。利用using语句来处理数据库对象可以为保存键值提供了机会(减少了try/catch/finally的开销)。并且,我利用微软数据接入应用程序块(DAAB)来进一步简化代码,下面摘录的代码显示了如何对于数据库连接使用using函数:
using ( SqlConnection conn = new SqlConnection(Global.CvoneConnection)
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction()) {
try {
SqlHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, "sp_name");
trans.Commit();
} catch(Exception ex) {
trans.Rollback();
throw ex;
} } }
代码通过一个数据库事务来传递一个命令给一个SQL数据库服务器(通过已保存的程序)。如果没有如到任何的异常,这个事务就会被接受。请注意,在using函数中,try/catch语言仍然在使用,因为对于处理回滚命令的时候catch是不可少的。同时,因为using函数可以实现清除数据库连接中的对象的操作,所以就不再使用finally函数了。结合使用using关键字和DAAB可以显著的减少代码的编写行数。
VB.NET开发者
当有人赞美C#的优点的时候VB.NET开发者经常会非常恼火,但是,就在我写这篇文章的时候,在VB.NET中还没有using函数。我曾经读过各种各样的关于VB.NET下一版本将会包含using关键字的报道,我们拭目以待。我希望using关键字将会包含在VB.NET中,因为它在某些情况下确实非常节省时间。
总是清除你的垃圾
最近我和一个客户一起工作,他经历过ASP.NET中漫长的等待时间,因为ASP.NET过多的依赖于SQL服务器。简简单单观察一下数据库服务器中打开的程序就会发现,ASP.NET应用程序打开了数据库连接但却没有关闭它们。在合适的时间关闭连接并释放有关的对象资源,可以大大提高程序的性能。using关键字也可以减轻这种情况的出现,但是VB.NET中却不包含有这种功能。
虽然说.NET架构提供了自动的碎片整理功能,并且可以发现许多以前老的C++开发者遭遇到的内存问题,但是在架构范围内使用完各种各样的资源以后你仍需要清理一下那些自己不需要的资源。
使用Enum类
Enum类包括以下的方法:
Equals:判断对象是否相等。
Format:使用指定格式来显示数值。
GetName:返回指定数值的名称。
GetNames:返回数值表的名称列表。
GetUnderlyingType:获得与枚举相关的类型。
GetValues:获得枚举的数值数组。
IsDefined:获得true/false,以表示指定的常量是否已经被定义。
这些方法允许你处理枚举数值,以及访问一个枚举的各个属性。例如,以下的C#代码行显示了对象的类型:
而以下的if语句判断了一个数值是否已经被赋值:
Console.Out.WriteLine("Mark");
}
使用的Enum对象
Enums是通过.NET框架类而被使用。现在让我们看一看一些范例。在WebControls空间名称中有一些例子。FirstDayOfWeek Enum 表示以星期天为0的星期数值,同样,FontSize Enum决定字体大小,这一字体大小以NotSet为0,而以XXLarge为10的范围。
枚举器(Enumerators)通过Intellisense帮助将开发过程中的帮助特性添加到Visual Studio .NET。键入枚举器名称和输入一定范围就可以显示附带变量数值的一个选择器,这可以使得满足开发人员所需要的变量。
将这一工具添加到你的开发工具箱
一个枚举是一个指定常量的数组,它提供处理静态数值的一个高效率方法,这使得静态数值的读取、维护、执行都变得更加容易。在以后的开发项目中请放心充分利用这一工具。