C#的nameapace和Java的package

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
  • 新建了兩個方法Test2Test3
  • 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章