Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Namespace ใน C# vs Package ใน Java: ความแตกต่าง

ทั้ง Namespace (C#) และ Package (Java) ใช้เพื่อจัดกลุ่มโค้ด ป้องกันชื่อชนกัน (Naming Conflict) และจัดการ Visibility แต่มีรายละเอียดที่ต่างกัน

Package ใน Java

  • ประกาศด้านบนสุดไฟล์: package com.example.project;
  • โครงสร้างไดเรกทอรี ต้องตรงกับ Package Structure
  • หนึ่งไฟล์ = หนึ่ง Package
  • ควบคุม Access ได้: package-private (default) จำกัดใน Package เดียวกัน

Namespace ใน C#

  • ประกาศด้วย Block: namespace MyProject { ... }
  • โครงสร้างโฟลเดอร์ ไม่ต้องตรงกับ Namespace
  • หนึ่งไฟล์ สามารถมีหลาย Namespace ได้
  • ไม่มี Access Modifier เหมือน package-private (ใช้ internal สำหรับ Assembly-level)

ตัวอย่าง Syntax

Java Package

package com.company.project.module;

public class MyClass { ... }

C# Namespace

namespace MyCompany.Project.Module
{
    public class MyClass { ... }
}

// หรือ File-scoped namespace (C# 10+)
namespace MyCompany.Project.Module;

public class MyClass { ... }

ตารางเปรียบเทียบ

คุณสมบัติJava PackageC# Namespace
Syntaxpackage name;namespace name { }
Directory Mappingบังคับ ต้องตรงกันไม่บังคับ (แนะนำให้ตรงเพื่อความสวยงาม)
Multiple per Fileไม่ได้ (1 file = 1 package)ได้ (หลาย namespace ในไฟล์เดียว)
Access Controlมี package-private (default)ไม่มี (ใช้ internal สำหรับ assembly)
Nestedไม่ได้ได้ (namespace ใน namespace)

C# internal vs Java package-private

internal ใน C# จำกัดการเข้าถึงใน Assembly เดียวกัน (DLL/EXE เดียว) ไม่ใช่ Namespace