命名空間
在C#中,命名空間(Namespace)是一種將類和其他相關(guān)類型組織在一起的方式??梢詫⒚臻g看作是一個(gè)容器,用于管理和組織類和其他類型。通過(guò)將相關(guān)的類型組織在一起,可以使代碼更加清晰和易于維護(hù)。
命名空間的主要目的是為了避免名稱沖突,使得開(kāi)發(fā)人員可以使用相同名稱來(lái)命名不同的類型。
1、命名空間的定義與訪問(wèn)
命名空間的定義是以關(guān)鍵字 namespace
開(kāi)始,后跟命名空間的名稱,如下所示:
// 定義命名空間
namespace namespace_name
{
// 代碼聲明
}
// 嵌套定義命名空間
namespace namespace_name1
{
// 代碼聲明
namespace namespace_name2
{
// 代碼聲明
}
}
- C#中的命名空間可以包含其他命名空間和類,即命名空間可以嵌套,并且可以在同一個(gè)文件中定義多個(gè)命名空間。
- 在命名空間中定義的類型可以通過(guò)完全限定名稱(包括命名空間和類型名稱):
namespace_name.item_name;
來(lái)訪問(wèn)。 - 例如,如果在命名空間A中定義了一個(gè)類B,那么可以使用
A.B
的方式來(lái)訪問(wèn)這個(gè)類。
using System;
// 定義命名空間1
namespace first_space
{
// 定義命名空間1中的類
class namespace_cl
{
// 定義命名空間1中的方法,輸出字符串"Inside first_space"
public void func()
{
Console.WriteLine("Inside first_space");
}
}
}
// 定義命名空間2
namespace second_space
{
// 定義命名空間2中的類
class namespace_cl
{
// 定義命名空間2中的方法,輸出字符串"Inside second_space"
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
// 定義測(cè)試類,位于全局命名空間中
class TestClass
{
static void Main(string[] args)
{
// 通過(guò)完全限定名稱,創(chuàng)建命名空間1中的類的實(shí)例
first_space.namespace_cl fc = new first_space.namespace_cl();
// 通過(guò)完全限定名稱,創(chuàng)建命名空間2中的類的實(shí)例
second_space.namespace_cl sc = new second_space.namespace_cl();
// 調(diào)用命名空間1中的方法,輸出字符串"Inside first_space"
fc.func();
// 調(diào)用命名空間2中的方法,輸出字符串"Inside second_space"
sc.func();
Console.ReadKey();
}
}
- 可以注意到,類可以放在命名空間中,也可以不放:
- 如果不放在命名空間中,則它默認(rèn)屬于全局命名空間。
- 如果放在命名空間中,則需要使用完全限定名稱來(lái)引用該類。
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Inside first_space
Inside second_space
2、全局命名空間的訪問(wèn)
在 C# 中,如果沒(méi)有指定任何命名空間,代碼就會(huì)被放置在全局命名空間中。這意味著在同一個(gè)程序集中的所有代碼都可以訪問(wèn)這些全局命名空間中定義的類型和成員,而不需要任何特殊的引用。
以下是一個(gè)簡(jiǎn)單的示例,演示了一個(gè)類放置在全局命名空間中的情況:
class GlobalClass
{
public void GlobalMethod()
{
Console.WriteLine("This is a method in the global namespace.");
}
}
namespace MyNamespace
{
class MyClass
{
public void MyMethod()
{
// 可以直接訪問(wèn)全局命名空間中的類型和成員
GlobalClass gc = new GlobalClass();
gc.GlobalMethod();
}
}
}
在上面的代碼中,GlobalClass
類被放置在全局命名空間中,而 MyClass
類被放置在 MyNamespace
命名空間中。在 MyMethod
方法中,可以直接訪問(wèn) GlobalClass
類型和 GlobalMethod
方法,而不需要特別的命名空間引用。
3、程序集間訪問(wèn)命名空間
使用命名空間可以使得代碼更加模塊化和可重用,也可以使得代碼更加易于組織和維護(hù)。在C#中,有許多預(yù)定義的命名空間,例如常見(jiàn)的System
和System.Collections
,用于包含常用的類和類型。開(kāi)發(fā)人員還可以定義自己的命名空間來(lái)組織自己的代碼。
當(dāng)我們?cè)诹硪粋€(gè)程序集中想要使用當(dāng)前程序集定義的類型,就需要在另一個(gè)程序集中通過(guò)using語(yǔ)句
導(dǎo)入對(duì)應(yīng)的命名空間,具體方法將在下面介紹。
using語(yǔ)句
在 C# 中,using 語(yǔ)句主要用于定義一個(gè)代碼塊,在該代碼塊結(jié)束時(shí)自動(dòng)釋放資源。這可以避免在程序執(zhí)行過(guò)程中出現(xiàn)資源泄漏的問(wèn)題,因?yàn)樵谑褂觅Y源的代碼塊結(jié)束時(shí),using 語(yǔ)句會(huì)自動(dòng)調(diào)用 Dispose 方法來(lái)釋放資源。
但using語(yǔ)句的用法卻不僅僅局限于上述一種,下面將介紹幾種using語(yǔ)句的常見(jiàn)用法。
1、引入命名空間
在C#中,命名空間用于組織代碼和避免命名沖突。如果要使用命名空間中的類型,需要通過(guò)using語(yǔ)句引入。引入后,就可以直接使用該命名空間中的類型,而不需要使用完全限定名(類似于python中的import導(dǎo)包)。
例如,要使用System.Collections.Generic
命名空間中的List類型
,可以在代碼文件的開(kāi)頭添加以下語(yǔ)句:
using System.Collections.Generic;
這樣,在代碼中就可以直接使用List類型,而不需要使用完全限定名System.Collections.Generic.List
。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
Console.WriteLine("Count = " + numbers.Count);
}
}
對(duì)與我們自己定義的命名空間,也是同樣的使用方法。以下是一個(gè)示例代碼,其中命名空間MyNamespace
定義了一個(gè)類MyClass
:
// 自定義的命名空間
namespace MyNamespace
{
public class MyClass
{
public void MyMethod()
{
Console.WriteLine("Hello, World!");
}
}
}
在另一個(gè)程序集中,可以通過(guò)以下方式引用并使用MyClass
:
// 引入命名空間
using MyNamespace;
class Program
{
static void Main(string[] args)
{ // 直接使用定義的類
MyClass obj = new MyClass();
obj.MyMethod();
}
}
2、自動(dòng)釋放資源
在C#中,有些類型需要手動(dòng)釋放資源,否則可能會(huì)造成內(nèi)存泄漏或其他問(wèn)題。例如,FileStream
類型用于操作文件流,必須手動(dòng)關(guān)閉才能釋放資源。
為了方便起見(jiàn),C#提供了using語(yǔ)句來(lái)自動(dòng)釋放資源。using語(yǔ)句創(chuàng)建一個(gè)作用域,在作用域結(jié)束時(shí)自動(dòng)釋放資源。例如,以下代碼使用using語(yǔ)句打開(kāi)文件流,并在使用后自動(dòng)關(guān)閉:
using (var fileStream = new FileStream("example.txt", FileMode.Open))
{
// 在此處使用文件流
}
在using語(yǔ)句中創(chuàng)建的文件流會(huì)在作用域結(jié)束時(shí)自動(dòng)關(guān)閉,不需要手動(dòng)調(diào)用Close方法。
需要注意的是,只有實(shí)現(xiàn)了IDisposable
接口的類型才能使用using語(yǔ)句進(jìn)行自動(dòng)釋放資源。因此,如果使用using語(yǔ)句,需要確保所使用的類型實(shí)現(xiàn)了IDisposable
接口。
3、起別名
在 C# 中,可以使用 using 關(guān)鍵字來(lái)為一個(gè)命名空間或類型起別名,以便在代碼中使用更簡(jiǎn)短的名稱。
例如,如果你想在代碼中頻繁使用 System.Collections.Generic
命名空間中的 List<T>
類,可以使用 using
關(guān)鍵字為其起一個(gè)別名。以下是使用 using 關(guān)鍵字為命名空間和類型起別名的示例:
using Alias = System.Collections.Generic.List<string>;
// 使用別名
Alias list = new Alias();
list.Add("hello");
list.Add("world");
在上面的示例中,我們使用 using
關(guān)鍵字為 System.Collections.Generic
命名空間中的 List<string>
類型起了一個(gè)別名 Alias。然后,我們可以在代碼中使用別名 Alias 來(lái)創(chuàng)建新的 List<string>
對(duì)象并進(jìn)行操作。
4、using static 指令
在C# 6及以上版本引入了 using static
指令,它允許在代碼中使用靜態(tài)成員,而不需要每次都通過(guò)類型名來(lái)訪問(wèn)。
使用 using static
指令,可以將一個(gè)靜態(tài)類的成員方法或?qū)傩詫?dǎo)入到當(dāng)前代碼文件的(全局)命名空間中,從而可以直接使用方法或?qū)傩悦Q,而不需要通過(guò)類名來(lái)訪問(wèn)。
這種語(yǔ)法糖可以使代碼更加簡(jiǎn)潔易讀。以下是使用 using static
指令的示例:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-674332.html
using static System.Math;
public class Program
{
public static void Main(string[] args)
{
double a = 3;
double b = 4;
double c = Sqrt(a * a + b * b);
Console.WriteLine($"The hypotenuse of a right triangle with legs {a} and {b} is {c}.");
}
}
在上面的示例中,我們使用 using static
指令導(dǎo)入了 System.Math
靜態(tài)類中的全部方法,從而可以直接使用 Sqrt
方法,而不需要通過(guò) Math 類名來(lái)訪問(wèn)。這樣可以使代碼更加簡(jiǎn)潔易讀。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-674332.html
- 需要注意的是,使用 using static 指令可能會(huì)導(dǎo)致命名沖突,因此應(yīng)該謹(jǐn)慎使用。
到了這里,關(guān)于unity的C#學(xué)習(xí)——命名空間的定義與訪問(wèn)、using語(yǔ)句的常見(jiàn)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!