public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)
เรียนรู้ว่า public, internal, protected และ private เปลี่ยนการมองเห็นอย่างไร ดูกฎเรื่องการสืบทอดและแอสเซมบลีเดียวกัน หมายเหตุ: การเข้าถึงระดับ file ยังไม่มีใน C# 6
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
ทบทวน
ทบทวน: เลือกระดับการมองเห็นที่เล็กที่สุดเท่าที่จำเป็น: 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- public/internal/protected/private (พร้อมหมายเหตุเรื่อง file)
- เนมสเปซ คำสั่ง using และ global usings (หมายเหตุ)
- ชนิดแบบบางส่วนและไฟล์