C#的namespace和Java的package
Java中的package
在java中我們一般談到package都知道這是java的包機,在java中爲了方便類和類之間的管理我們引入了package用來解決這個問題,例如
package com.edu.test
public class A{
public static void Test();
}
在另一個包中的另一個類中我們要想訪問類A我們需要藉助import
關鍵字
import com.edu.test.A
public class B{
public void Test2(){
A.Test();
}
}
當然爲了訪問其他包中的類我們需要public
關鍵字,同樣的爲了直接調用方法我們需要關鍵字static
聲明靜態方法。
Java包的作用
- 1、把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。
- 2、如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。
- 3、包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。
創建包時需要注意如下幾點:
(1)創建包時用package關鍵字;
(2)如果有包聲明,包聲明一定作爲源代碼的第一行;
(3)包的名稱一般爲小寫,包名要有意義。例如:數學計算包名可以命名“math”,再如,繪圖包可以命名“drawing”;
C#中的namespace
聲明一個namespace(命名空間)
namespace myApp
{
public class Program
{
public static void Test()
}
}
如上所示這樣我們就可以在C#中聲明一個命名空間
Java的package和C#的namespace的最大區別
- namespace是可以嵌套的
namespace A
{
namespace B
{
namespace C
{
}
}
}
測試
- 新建一個文件Program.cs
using System;
namespace myApp
{
namespace Test{
class Program2
{
public static void Test1()
{
Console.WriteLine("This is namespace Test, Class Program2, Method Test1");
}
}
}
public class Program
{
public static void Test3()
{
Console.WriteLine("Now using namespace myApp Class Program");
}
}
}
如上所示我們有兩個命名空間分別是myApp和Test
- 新建一個文件Program2.cs
using myApp;
using System;
namespace myApp2
{
class Program3
{
public static void Test2()
{
Program.Test3();
}
public static void Test3()
{
myApp.Test.Program2.Test1();
}
static void Main(String[] args)
{
Test2();
Test3();
}
}
}
和java一樣我們需要導入我們的命名空間這裏我們使用using
關鍵字 例如:using myApp
- 這裏新建了一個命名空間myApp2
- 新建了兩個方法Test2、Test3
- Test2方法調用myApp命名空間中的Program類
- Test3方法調用myApp命名空間的子命名空間Test中的Program1類的Test1方法
輸出
已加載“/usr/local/share/dotnet/shared/Microsoft.NETCore.App/2.2.5/System.Private.CoreLib.dll”。已跳過加載符號。模塊進行了優化,並且調試器選項“僅我的代碼”已啓用。
已加載“/Users/rex/Desktop/Code/dotnet/myApp/bin/Debug/netcoreapp2.2/myApp.dll”。已加載符號。
已加載“/usr/local/share/dotnet/shared/Microsoft.NETCore.App/2.2.5/System.Runtime.dll”。模塊已生成,不包含符號。
已加載“/usr/local/share/dotnet/shared/Microsoft.NETCore.App/2.2.5/System.Console.dll”。已跳過加載符號。模塊進行了優化,並且調試器選項“僅我的代碼”已啓用。
已加載“/usr/local/share/dotnet/shared/Microsoft.NETCore.App/2.2.5/System.Threading.dll”。模塊已生成,不包含符號。
已加載“/usr/local/share/dotnet/shared/Microsoft.NETCore.App/2.2.5/System.Runtime.Extensions.dll”。模塊已生成,不包含符號。
Now using namespace myApp Class Program
This is namespace Test, Class Program2, Method Test1
程序“[41008] myApp.dll”已退出,代碼爲 0 (0x0)。
如上所示我們已經完成的調用
總結
- Java的package和C#的namespace都是爲了更方便的管理類
- C#的namespace支持子namespace