ถ้าไม่ระบุ Access Modifier สำหรับ Class ค่าเริ่มต้นคือ internal
Internal Access Specifier
- เข้าถึงได้จากทุกที่ภายใน **Assembly เดียวกัน** (Project เดียวกัน)
- ไม่เข้าถึงได้จาก Assembly อื่น (External)
- ใช้สำหรับ Implementation Details ภายใน Library
ตัวอย่าง
using System;
namespace RectangleApplication
{
// ไม่มี Access Modifier = internal
class Rectangle
{
// Member Variables - internal (default สำหรับ Members ใน internal Class)
internal double length;
internal double width;
// Method - private (default สำหรับ Members)
double GetArea()
{
return length * width;
}
// Public Method - เข้าถึงได้จากนอก
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
// Class อื่นใน Assembly เดียวกัน เข้าถึง internal Members ได้
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.length = 4.5; // เข้าถึง internal Field ได้
r.width = 3.5; // เข้าถึง internal Field ได้
r.Display(); // เรียก Public Method ได้
Console.ReadLine();
}
}
}
ผลลัพธ์
Length: 4.5 Width: 3.5 Area: 15.75
Access Modifiers สำหรับ Class (Top-level)
| Modifier | Visibility | Default? |
|---|---|---|
| public | ทุก Assembly | ไม่ |
| internal | Assembly เดียวกัน | ✅ Default |
| private | Nested Class เท่านั้น | Nested Class Default |
| protected | Nested Class เท่านั้น | ไม่ |
| protected internal | Nested Class เท่านั้น | ไม่ |
| private protected | Nested Class เท่านั้น | ไม่ |
Members Default Access
- ใน
class: **private** (default) - ใน
struct: **private** (default) - ใน
interface: **public** (always, ไม่ระบุได้) - ใน
enum: **public** (always)
Best Practice
ระบุ Access Modifier ชัดเจนเสมอ เพื่อความชัดเจนและ Maintainability