คลาสเป็นหนึ่งในประเภทที่จำเป็นใน C # เราสามารถคิดว่าคลาสเป็นแบบพิมพ์เขียวสำหรับอ็อบเจ็กต์ที่เกี่ยวข้องกับโดเมนของปัญหา เป็นเทมเพลตที่เราสร้างวัตถุ กำหนดโครงสร้างและพฤติกรรมที่จะแชร์โดยชุดของวัตถุที่สร้างจากคลาสนี้ กล่าวง่ายๆ คลาสคือตัวตัดคุกกี้ และวัตถุก็คือตัวคุกกี้เอง
คลาสยังเปิดใช้งานการห่อหุ้ม ซึ่งเป็นแนวคิดที่สำคัญในการเขียนโปรแกรมเชิงวัตถุ หมายถึงการรวมข้อมูลและการดำเนินการที่ทำงานกับข้อมูลในที่เดียวและจัดเตรียม API อย่างง่ายให้กับผู้ใช้ของวัตถุนั้น ชั้นเรียนช่วยให้เราสามารถสรุปข้อมูลและซ่อนรายละเอียดที่ไม่เกี่ยวข้องจากชั้นเรียนอื่นๆ
เราสามารถสร้าง class โดยใช้ class ตามด้วยชื่อ class
// User.cs public class User{ private string name; private int salary; public void Promote(){ salary += 1000; } }
ในตัวอย่างข้างต้น User คือคลาสที่แสดงถึงผู้ใช้ คลาสสรุปข้อมูลสองส่วน - ชื่อ และ เงินเดือน . สิ่งเหล่านี้เรียกว่าฟิลด์คลาส และเก็บชื่อผู้ใช้และเงินเดือน นอกจากนี้ยังมีเมธอดชื่อ Promote() ซึ่งขึ้นเงินเดือนของผู้ใช้
แต่ละคลาสมีตัวแก้ไขการเข้าถึงที่เกี่ยวข้องซึ่งควบคุมว่าคลาสอื่นจะมองเห็นได้หรือไม่ ต่อไปนี้คือค่าที่เป็นไปได้ห้าค่าที่เราสามารถจัดเตรียมให้กับตัวแก้ไขการเข้าถึงได้
ตัวแก้ไขการเข้าถึง | คำอธิบาย |
---|---|
สาธารณะ | ไม่จำกัดการเข้าถึง |
ได้รับการปกป้อง | จำกัดการเข้าถึงคลาสที่ได้รับ |
ภายใน | จำกัดการเข้าถึงแอสเซมบลี |
ป้องกันภายใน | จำกัดการเข้าถึงแอสเซมบลีหรือคลาสที่ได้รับ |
ส่วนตัว | ห้ามเข้าจากภายนอก |
ในการสร้างอินสแตนซ์ของคลาส เราสามารถใช้ ใหม่ คำสำคัญ. ใหม่ ตัวดำเนินการคำนวณจำนวนไบต์ที่ข้อมูลของวัตถุต้องการและจัดสรรหน่วยความจำสำหรับวัตถุ จากนั้นจะส่งกลับตัวชี้ (เรียกอีกอย่างว่าการอ้างอิง) ไปยังวัตถุที่สร้างขึ้นใหม่
var alice = new User(); var bob = new User();
การอ้างอิงนี้จะถูกเก็บไว้ในตัวแปรทางด้านซ้ายของเครื่องหมาย =ในตัวอย่างข้างต้น อลิซและบ๊อบถือการอ้างอิงหรือตัวชี้ไปยังออบเจกต์ที่สร้างขึ้นใหม่
ใน C# หลักการตั้งชื่อสำหรับคลาสตามหลัง PascalCase ซึ่งใช้อักษรตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่ในคำประสม เช่น StringBuilder, UserController เป็นต้น ไม่จำเป็นต้องสร้างคลาสในไฟล์ที่มีชื่อตรงกับชื่อคลาส อย่างไรก็ตาม มันเป็นแบบแผนที่ใช้โดยโปรเจ็กต์ C# ส่วนใหญ่
ตัวสร้าง
ในตัวอย่างข้างต้น เมื่อเราสร้างอินสแตนซ์ของคลาส User เช่น alice และ bob เราไม่ได้ระบุชื่อเริ่มต้นและเงินเดือนของพวกมัน บ่อยครั้งที่วัตถุที่สร้างขึ้นใหม่ต้องการข้อมูลบางอย่างเพื่อทำงาน และใช้ตัวสร้างเพื่อเริ่มต้นข้อมูลคลาส
เราสามารถเพิ่ม Constructor เพื่อให้ชื่อและเงินเดือนแก่ผู้ใช้ได้ดังนี้ −
public class User{ private string name; private int salary; public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } }
การมีคอนสตรัคเตอร์ทำให้เราสามารถส่งต่อชื่อและเงินเดือนของผู้ใช้เมื่อสร้างอินสแตนซ์ใหม่
var alice = new User("Alice", 50000); var bob = new User("Bob", 45000);
เป็นไปได้ที่จะมีคอนสตรัคเตอร์มากกว่าหนึ่งตัวในคลาส การมีคอนสตรัคเตอร์หลายตัวทำให้เราเริ่มต้นคลาสได้หลายวิธี ตัวอย่างเช่น เราอาจเพิ่มตัวสร้างอื่นที่ใช้เฉพาะชื่อผู้ใช้และกำหนดเงินเดือนเริ่มต้น
public User(string name){ this.name = name; this.salary = 50000; }
ตัวอย่าง
using System; class Program{ static void Main(){ var alice = new User(); alice.Print(); var bob = new User(); bob.Print(); var chris = new User("Chris", 50000); chris.Print(); var debs = new User("Debs", 45000); debs.Print(); var scott = new User("Scott"); scott.Print(); } } public class User{ private string name; private int salary; public User(){ } public User(string name){ this.name = name; this.salary = 50000; } public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } public void Print(){ Console.WriteLine($"{name}: {salary}"); } }
ผลลัพธ์
: 0 : 0 Chris: 50000 Debs: 45000 Scott: 50000