C# Academy · บทเรียน

public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)

เรียนรู้ว่า public, internal, protected และ private เปลี่ยนการมองเห็นอย่างไร ดูกฎเรื่องการสืบทอดและแอสเซมบลีเดียวกัน หมายเหตุ: การเข้าถึงระดับ file ยังไม่มีใน C# 6

บทเรียน 1 จาก 38 ขั้นตอน

public/internal/protected/private (พร้อมหมายเหตุเรื่อง file) เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

ภาพรวมตัวปรับการเข้าถึง

เป้าหมาย: เลือกระดับการมองเห็นที่เหมาะสม

  • public: ใช้ได้จากทุกที่
  • internal: ใช้ได้ภายในแอสเซมบลีเดียวกัน
  • protected: ใช้ได้ในคลาสที่สืบทอด
  • private: ใช้ได้ภายในคลาสเดียวกัน
  • file: ใหม่กว่า C# 6 (ข้อมูลเท่านั้น)

private เทียบกับ public

เก็บฟิลด์เป็น private และเปิดเผยสมาชิกแบบ public ที่ผ่านการตรวจสอบแล้ว

using System;

// private: only inside the class; public: everywhere the class is visible
public class Box
{
  private int _width;             // hidden storage
  public int Width                // controlled access
  {
    get { return _width; }
    set { _width = value < 0 ? 0 : value; } // simple guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box b = new Box();
    // b._width = -5; // INVALID: private (kept as comment)
    b.Width = 10;      // OK: public property
    Console.WriteLine("Width = " + b.Width);
  }
}

protected ในการสืบทอด

protected ใช้สำหรับการสืบทอด: ชนิดที่สืบทอดสามารถใช้งานได้ แต่โค้ดภายนอกไม่สามารถใช้ได้

using System;

public class BaseCounter
{
  protected int Count; // derived classes can see this
  public int Value() { return Count; }
}

public class StepCounter : BaseCounter
{
  public void Step() { Count = Count + 1; } // allowed: protected
}

public class Program
{
  public static void Main(string[] args)
  {
    StepCounter sc = new StepCounter();
    sc.Step();
    // sc.Count = 5; // INVALID from outside (commented)
    Console.WriteLine("Value = " + sc.Value());
  }
}

การเข้าถึงแบบ internal

internal จำกัดการมองเห็นไว้เฉพาะแอสเซมบลีปัจจุบัน ซึ่งอาจเป็นการสร้างไลบรารีหรือแอป

using System;

// internal type: visible only inside this assembly
internal class InternalHelper
{
  public static string Ping() { return "pong"; }
}

// public type can use internal from the same assembly
public class UsesInternal
{
  public string Call() { return InternalHelper.Ping(); }
}

public class Program
{
  public static void Main(string[] args)
  {
    UsesInternal u = new UsesInternal();
    Console.WriteLine(u.Call());
  }
}

protected internal

protected internal หมายความว่า ชนิดที่สืบทอดสามารถเข้าถึงได้ หรือโค้ดใด ๆ ในแอสเซมบลีเดียวกันสามารถเข้าถึงได้

using System;

public class LibraryBase
{
  // Accessible to derived types OR anywhere in the same assembly
  protected internal void Touch() { Console.WriteLine("touched"); }
}

public class LibChild : LibraryBase
{
  public void Use() { Touch(); } // via inheritance
}

public class Program
{
  public static void Main(string[] args)
  {
    LibChild c = new LibChild();
    c.Use();

    LibraryBase b = new LibraryBase();
    b.Touch(); // same assembly, allowed
  }
}

หมายเหตุและเคล็ดลับเกี่ยวกับตัวปรับ file

หมายเหตุ: ตัวปรับการเข้าถึง file เพิ่มเข้ามาใน C# รุ่นใหม่กว่า (ไม่มีใน C# 6) สำหรับ C# 6 ให้ใช้ public, internal, protected, private และ protected internal เท่านั้น

  • เลือกใช้ private เป็นค่าเริ่มต้น
  • ใช้ public เฉพาะส่วนที่เป็นส่วนติดต่อโปรแกรม
  • ใช้ internal เพื่อซ่อนการทำงานภายในจากแอสเซมบลีอื่น
  • ใช้ protected สำหรับการทำงานร่วมกันระหว่างชนิดฐานกับชนิดที่สืบทอด

ความหมายของ internal

ตรวจสอบความเข้าใจ: ตัวปรับการเข้าถึง internal ใน C# หมายความว่าอย่างไร

ทบทวน

ทบทวน: เลือกระดับการมองเห็นที่เล็กที่สุดเท่าที่จำเป็น: private → protected/internal → public C# 6 ไม่มีตัวปรับ file รุ่นใหม่ ให้ใช้ internal เพื่อซ่อนสมาชิกในระดับแอสเซมบลี

เริ่มต้นได้ฟรี

เรียนรู้ C# ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
93
บทเรียน
346

คำถามที่พบบ่อย

บทเรียน “public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)”

เรียนรู้ว่า public, internal, protected และ private เปลี่ยนการมองเห็นอย่างไร ดูกฎเรื่องการสืบทอดและแอสเซมบลีเดียวกัน หมายเหตุ: การเข้าถึงระดับ file ยังไม่มีใน C# 6 คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)
  2. เนมสเปซ คำสั่ง using และ global usings (หมายเหตุ)
  3. ชนิดแบบบางส่วนและไฟล์
← กลับไปที่ C# Academy