คลาสเป็นหนึ่งในประเภทที่จำเป็นใน 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