[Unity] C#中级编程 - 10 - 命名空间/using

Posted L建豪 忄YH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity] C#中级编程 - 10 - 命名空间/using相关的知识,希望对你有一定的参考价值。

[Unity中文课堂教程] C#中级编程 - 10 - 命名空间/using

原教程视频地址:

《[Unity中文课堂教程预告片] C#中级编程_哔哩哔哩_bilibili

C#中级编程 - Unity中文课堂 (u3d.cn)

C# 命名空间(Namespace) | 菜鸟教程 (runoob.com)

内容短小精悍简练,每节只有几分钟。很适合用来预习和复习。

命名空间

  • 类似C语言中的库、Python中的包/模块,概念。
  • 使用关键字using导入“命名空间”,使用关键字namespace创建“命名空间”

对于不加命名空间,直接暴露的代码,且称为处于根空间内吧。

脚本①

namespace Exercise_4_21			// 命名空间一

	public class MyClass
	
		public MyClass()
		
			Debug.Log("Exercise_4_21;");
		
	

脚本②

namespace Exercise_4_22			// 命名空间二

	public class MyClass
	
		public MyClass()
		
			Debug.Log("Exercise_4_22;");
		
	
	
	namespace Exercise_4_22_ 	// 支持嵌套
	
		public class MyClass
		
			public MyClass()
			
				Debug.Log("Exercise_4_22_;");
			
		
	

脚本③

/*					// 不使用命名空间,如果去掉注释,上面脚本中带命名空间的重名类会被隐藏。
public class MyClass		// 如果与命名空间内容重名,则会调用优先调用没有命名空间的。

	public MyClass()
	
		Debug.Log("Exercise_4_23;");
	

*/

脚本④

// using Exercise_4_21;		// 如果两个都写,且两个命名空间有重名内容,会编译报错。
// using Exercise_4_22;		// 嵌套的重名也会
using Exercise_4_22.Exercise_4_22_;		// 点分割嵌套

public class Exercise_4_24 : MonoBehaviour

    void Start()
    
        MyClass myclass_3 = new MyClass();	// 根据导入的命名空间不同而调用不同的内容。
        
        Exercise_4_22.MyClass myclass_2 = new Exercise_4_22.MyClass();	// 精准指定调用
        Exercise_4_21.MyClass myclass_1 = new Exercise_4_21.MyClass();
        Exercise_4_22.Exercise_4_22_.MyClass myclass_0 = 				// 可以写注释
		new Exercise_4_22.Exercise_4_22_.MyClass();
		// c#支持换行输入,不需要斜杆\\,斜杆\\反而会报错
    

  • 总结特性

    1. 关键字namespace相当于给作用域内的命名加个前缀,用于分割代码块,避免定义重名之类的问题。
    2. 前缀加命名太长了,所以可以使用关键字using导入命名空间。

    简单理解就是,又 把代码块的内容拷贝了一份

    如果两份拷贝内容有重名,编译报错。如果拷贝内容和原有内容有重名,不拷贝。

    1. 支持嵌套创建命名空间,使用方法一样。

导入静态类

  • 静态类也可以使用using static关键字组合导入,导入后静态类的内容就可以不用加前缀类名使用。类似导入命名空间。

脚本③

public static class MyClass_s			// 静态类

	static MyClass_s()					// 静态构造函数,不能写访问修饰符
	
		Debug.Log("Exercise_4_23;");
	
	
	public static int num = 423;		// 静态属性

脚本④:(添加内容)

using static MyClass_s;		// 直接访问静态类的内容,如果有命名空间加前缀。
							// 这不算访问静态类,不调用构造函数。
/* ... */
Debug.Log("Exercise_4_24;"+num);	// 直接访问静态类属性,同时第一次访问静态类,调用构造函数。
  • 总结特点:注意,一开始导入时不会调用构造函数的。

起别名

  • using还支持给命名空间、类、静态类,起别名。不能给类中的属性方法起别名,编译报错。

脚本④:(添加+修改)

using MyClass_0 = Exercise_4_22.Exercise_4_22_;			// 起别名,给命名空间起别名
using MyClass_1 = Exercise_4_22.Exercise_4_22_.MyClass;	// 起别名,给命名空间的类起别名
using MyClass_2 = MyClass_s;							// 给静态类起别名,如果有命名空间可加
/* ... */
MyClass_0.MyClass myclass_0 = new MyClass_0.MyClass();	// 访问命名空间的类
MyClass_1 myclass_1 = new MyClass_1();					// 同上,直接访问类
Debug.Log("Exercise_4_24;"+MyClass_2.num);				// 使用静态类的别名访问
  • 总结特点:如上注释为所求。

using语句:将实例与代码绑定

在菜鸟教程看到的,没遇见过,暂时忽略稀有用法。

以上是关于[Unity] C#中级编程 - 10 - 命名空间/using的主要内容,如果未能解决你的问题,请参考以下文章

[Unity] C#中级编程 - 10 - 命名空间/using

[Unity] C#中级编程 - 08 - 接口

[Unity] C#中级编程 - 08 - 接口

[Unity] C#中级编程 - 03 - 重载

[Unity] C#中级编程 - 07 - 多态

[Unity] C#中级编程 - 02 - 静态