命名空间
命名空间的本意是为了让代码结构更清晰,也顺便解决了类重名的问题。Java开发中不需要命名空间是因为java类是靠包名来区分的,而JavaScript这类的语言如果要实现区分同名对象就需要使用命名空间的思路设计代码。C#中提供了一套命名空间的规则,具体如下:
定义和使用命名空间:
using System;
using first_space;
namespace first_space
{
class ClassA
{
public void func()
{
Console.WriteLine("第一个命名空间ClassA的方法被执行");
}
}
class ClassB
{
public void func()
{
Console.WriteLine("第一个命名空间ClassB的方法被执行");
}
}
}
namespace second_space
{
class ClassA
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
class TestClass
{
static void Main(string[] args)
{
// 需要区分命名空间加命名空间,类名前面加了命名空间可以不使用using语句引用
first_space.ClassA fc = new first_space.namespace_cl();
second_space.ClassA sc = new second_space.namespace_cl();
fc.func();
sc.func();
// 不需要区分命名空间直接用类名,前提是要加using语句引用这个命名空间
ClassB cb = new ClassB();
cb.func();
Console.ReadKey();
}
}
嵌套命名空间:
using System;
using SomeNameSpace;
using SomeNameSpace.Nested;
namespace SomeNameSpace
{
public class MyClass
{
static void Main()
{
Console.WriteLine("In SomeNameSpace");
Nested.NestedNameSpaceClass.SayHello();
}
}
// 内嵌命名空间
namespace Nested
{
public class NestedNameSpaceClass
{
public static void SayHello()
{
Console.WriteLine("In Nested");
}
}
}
}
//执行结果如下:
//In SomeNameSpace
//In Nested
using关键字
using关键字最常见的使用方法是引用命名空间,但也有一些其他的用法:
using static 指令:指定无需指定类型名称即可访问其静态成员的类型
using static System.Math;var = PI; // 直接使用System.Math.PI
using起别名
using Project = PC.MyCompany.Project;
using语句:将实例与代码绑定,这时的using已经不是针对命名空间的操作了,我们可以把它看成一个代码块。
在()中声明一些变量,在{}中使用这些变量,{}中的代码会被放在一段try代码中,而这段代码执行完毕后会使用finally的方式调用所声明变量的Dispose方法(只有实现了IDisposable接口的类才可以在using代码块中声明,因为要调用Dispose方法)。
using System;
using UnityEngine;
namespace Y7PLAY.FlyingSB2
{
public class MyClass : IDisposable
{
public void MyFun()
{
}
public void Dispose()
{
throw new NotImplementedException();
}
}
public class TestScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
using (MyClass t1 = new MyClass())// 声明变量
{
t1.MyFun();//使用变量
}// 代码块结束后自动调用生成对象的Dispose方法
// 这段代码与上面那段代码相等,使用using语句更加简洁
MyClass t2 = null;
try
{
t2 = new MyClass();
t2.MyFun();
}
finally
{
t2.Dispose();
}
}
}
}
更多内容请查看总目录【Unity】Unity学习笔记目录整理