Contents
不引入即可使用
using的三种用法其一就是创建别名,给静态类创建别名,例
{{EJS0}}
这样即使不引入System.IO命名空间,也不用输入System.IO.File的全名,可以直接使用File调用。
解决二义性
可以用别名来覆盖当前文档中的类型,例如进行Unity开发的时候可能会出现System.Object和UnityEngine.Object冲突的情况,这时就可以使用using来制定默认的Object是哪个命名空间下的。
{{EJS1}}
这样就不会出现二义性的报错了。
缩短类名
using可以缩短类名,比如你的一些项目中的某些类中有嵌套类:
{{EJS2}}
那么Child的类型就是Parent.Child,而Parent又不是命名空间,无法使用using来导入,这个时候就可以用using给这个类起个别名,同时对静态类也有效。
{{EJS3}}
此处需要注意,using引用别名是类的完整路径,需要从根路径开写,所以如果在命名空间内则需要把命名空间的路径都加上去。
给类型起个别名
比如说int代表着一个整数型,windows的句柄也是以整数的方式存在的,windows的消息也都是整数的方式存在的,如果在操作windows时声明一个int,你不知道这个整数代表着什么意义,所以要用其他的类型名来让代码更可读,即使他们是同一个类型的。
{{EJS4}}
在C#写windows相关操作类库时经常需要句柄,就可以使用这种方式使代码更可读。(举个例子,不讨论IntPtr)
优点:类起别名更方便,不用写个新类就可以用有意义的名字给类型重新命名。
缺点:using范围问题,只能在当前文档中生效,在其他文档中调用时智能提示显示的是其他文档的别名状态、在当前文档中智能提示会拿别名覆盖原类名。
给泛型类起别名
在使用泛型容器时声明和赋值都比较麻烦,要写的很长,如果要和其他方法传参,之后还修改了类型的话,后续的修改更是麻烦。
{{EJS5}}
可以用using来解决这个问题。
{{EJS6}}
直接使用
{{EJS7}}
但是using问题同上有作用范围,只能在当前文档中生效。
使用对泛型的继承可以解决using作用范围的问题,但是这样就会新增加一个类。
{{EJS8}}