[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语句:将实例与代码绑定

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值