Windsails

...人生只似风前絮,欢也零星,悲也零星,都作连江点点萍...
随笔 - 49, 文章 - 8, 评论 - 334, 引用 - 41
数据加载中……

using的几种用法

1.using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。
例如:using System; 一般都会出现在*.cs中。

2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。
这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。

例如:

using System;
using aClass = NameSpace1.MyClass;
using bClass = NameSpace2.MyClass;

namespace NameSpace1 
{
    
public class MyClass 
    
{
        
public override string ToString() 
        
{
            
return "You are in NameSpace1.MyClass";
        }

    }

}


namespace NameSpace2 
{
    
class MyClass 
    
{
        
public override string ToString() 
        
{
            
return "You are in NameSpace2.MyClass";
        }

    }

}


namespace testUsing
{
    
using NameSpace1;
    
using NameSpace2;
    
/// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>

    class Class1
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//
            
            aClass my1 
= new aClass();            
            Console.WriteLine(my1);
            bClass my2 
= new bClass();
            Console.WriteLine(my2);
            Console.WriteLine(
"Press any key");
            Console.Read();
        }

    }

}


3.using语句,定义一个范围,在范围结束时处理对象。
场景:
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,但用using也很方便。
例如:

using (Class1 cls1 = new Class1(), cls2 = new Class1())
{
  
// the code using cls1, cls2


}
 // call the Dispose on cls1 and cls2


这里触发cls1和cls2的Dispose条件是到达using语句末尾或者中途引发了异常并且控制离开了语句块。

posted on 2004-09-12 22:14 风前絮~~ 阅读(14175) 评论(22)  编辑 收藏 网摘 所属分类: 读书随笔

评论

#1楼   回复  引用    

谢谢风前絮~~ !
你的文章让我知道了"using别名"用法。
2004-09-12 23:28 | dudu

#2楼   回复  引用    

不错!
继续努力
2004-09-13 15:37 | Goodspeed

#3楼   回复  引用    

很好啊!
谢谢!!!
2004-09-14 21:52 | zmsx

#4楼   回复  引用    

对于第三种using的使用,只能用于那些实现了IDisposable接口的类型!
2004-09-15 17:46 | 风前絮~~

#5楼[楼主]   回复  引用  查看    

关于第三种using的使用,其实有兴趣的可以用ILDASM来对比可以发现,其实这种写法是try...finally的简化语法而已。
因此实现资源的释放是十分必要的。
2004-09-17 14:57 | 风前絮~~      

#6楼   回复  引用    

这几天群里还有朋友在问using的用法,嘿嘿,风前絮~~兄已经给出了几种用法了,好啊!

-------------------
微软技术爱好者QQ群(群号:118-931)
2005-02-07 18:07 | 王Sir

#7楼   回复  引用    

请教:我在看ASP.net Time Tracker Starter Kit有一个问题始终搞不明白;
它定义了一个数据层命名空间
ASPNET.StarterKit.TimeTracker.DataAccessLayer
和业务层命名空间
ASPNET.StarterKit.TimeTracker.BusinessLogicLayer

另外还有一个web命名空间
ASPNET.StarterKit.TimeTracker.Web
这里在ASPNET.StarterKit.TimeTracker.Web这里定义了一个Global类。
现在问题是:
当在数据层和业务成引用时,直接用
Web.Global就可以达到 ASPNET.StarterKit.TimeTracker.Web.Glabal
目的, 我一开始就像他肯定用的是命名空间的别名,但是我找了一天也没有找到别名是在什么地方定义的.
后来我随便建立一个*.CS文件
不用倒入任何命名空间,只要在用ASPNET.StarterKit.TimeTracker就可以,也就是说
namespace ASPNET.StarterKit.TimeTracker.afsdfsdfsdfs

Web.Glabal gb=new Web.Global()
//这句话是正确的,根本没有用using aClass = NameSpace1.MyClass;
//using bClass = NameSpace2.MyClass;这样的方法.
//不知道各位怎么理解上面的代码?

2005-06-22 16:15 | 123

#8楼   回复  引用    

Web.Global就可以达到 ASPNET.StarterKit.TimeTracker.Web.Glabal
2005-07-04 15:01 | 意义

#9楼   回复  引用    

Web.Global就可以达到 ASPNET.StarterKit.TimeTracker.Web.Glabal
目的,这跟别名没有关系,是因为,此类已经引入命名空间ASPNET.StarterKit.TimeTracker, 所以不用写全称
2005-07-04 15:04 | 意意

#10楼   回复  引用    

谢谢,原来还有这么多用法啊。
2005-07-09 07:39 | 兰亭[未注册用户]

#11楼   回复  引用    

意意的说法我并不赞成,因为命名空间没有继承性
而且我以测试过,假设B导入A命名空间,C导入命名空间,但是并不能说明C也导入A命名空间
2005-09-20 09:39 | 123[未注册用户]

#12楼   回复  引用    

public int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
2006-11-30 11:02 | 王风[未注册用户]

#13楼   回复  引用  查看    

Mark :)
2007-01-11 20:24 | Hunts.C      

#14楼   回复  引用    

正好用上了,谢谢!
2007-06-21 13:57 | ansel

#15楼   回复  引用  查看    

谢谢,第三种方法不错~今天才知道,呵呵
2008-01-15 09:51 | w荒v原v狼w      

#16楼   回复  引用  查看    

路过 顶下
2008-04-15 11:47 | Michael.Wang      

#17楼   回复  引用    

谢啦
2008-09-26 13:44 | 555[未注册用户]

#18楼   回复  引用    

我在2008中测试了一下。
对于第二种用法,如果两个类名相同,并不需要两个都起别名。莫非之前的版本需要?
2008-11-15 21:14 | zhuxj[未注册用户]

#19楼   回复  引用  查看    

谢谢风前絮~~ !
你的文章让我知道了"using别名"用法。
2009-02-05 11:29 | JaggerLee      

#20楼   回复  引用    

实践证明你的测试是错的,,,,
2009-05-01 20:12 | 回18楼[未注册用户]



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 42444




相关文章:

相关链接: