# 17.มารู้จักกับ Class & Field กัน

💬 เคยหงุดหงิดกันไหมเวลาเขียนโปรแกรมแล้วต้องมาคอยจัดการกับตัวแปรเยอะๆ เช่น ข้อมูลของนักเรียน 1 คนต้องใช้ตัวแปร 4 ตัวเพราะมันมี *ชื่อ, นามสกุล, อายุ, รหัสนักเรียน* แล้วถ้าเราต้องเก็บข้อมูลนักเรียน 10 คนล่ะ? นั่นแสดงว่าเราต้องมีตัวแปรอย่างน้อย 40 ตัวใช่ไหม? แต่ลองคิดดูนะว่ามันจะปวดกบาลขนาดไหนถ้าต้องจัดการกับนักเรียน 100 คน!! เอาละไม่ต้องทนปวดกบาลอีกต่อไปเมื่อเรารู้จักกับสิ่งที่เรียกว่า **Class**

{% embed url="<https://www.youtube.com/watch?v=3l2hAqHfxN4&list=PLUjAn8nwWnijERZ3HpzBk7NfSrau74_lQ&index=32>" %}

## 🎯 สรุปสั้นๆ

### 👨‍🚀 คลาสคือ

การสร้างชนิดข้อมูลแบบใหม่ที่เราสามารถกำหนดได้เองว่ามันจะประกอบไปด้วยอะไรบ้าง เช่นข้อมูลของนักเรียน 1 คนที่ประกอบไปด้วย *ชื่อ, นามสกุล, อายุ, รหัสนักเรียน **แทนที่เราจะเขียนโค้ดแบบด้านล่าง***

```csharp
string firstName;
string lastName;
int age;
string id;
```

เราก็สามารถมาสร้างเป็นชนิดข้อมูลแบบใหม่ที่เราเรียกมันว่า Student แทน

```csharp
public class Student
{
   public string FirstName;
   public string LastName;
   public int Age;
   public string Id;
}
```

{% hint style="warning" %}
**นิยามจริงๆของ Class**\
คือ **ต้นแบบ** หรือ **พิมพ์เขียว** แต่คิดว่าอธิบายแบบนี้ละก็หลายๆคนคงกดเปลี่ยนไปดูการ์ตูนแล้วล่ะเลยขออธิบายแบบนี้ไปก่อนละกันนะ เดี๋ยวค่อยเข้าใจมันอีกทีตอนที่อธิบายเรื่อง **OOP** หรือที่เราเรียกเต็มๆกันว่า **Object Oriented Programming**
{% endhint %}

{% hint style="success" %}
Class เป็น **Reference type** เด้อ
{% endhint %}

### 👨‍🚀 การเรียกใช้งานคลาส

การใช้งาน class เราจะต้องทำการสร้าง object ขึ้นมาก่อนผ่านคำสั่ง new ตามตัวอย่างด้านล่าง

```csharp
Student s1 = new Student();
```

เมื่อเราต้องการใช้งานตัวแปรต่างๆของคลาสนั้นๆเราก็จะทำการกดปุ่ม (จุด) . เพื่อบอกว่าจะทำงานกับตัวแปรไหนของคลาสนั้นๆ ตามตัวอย่างด้านล่าง

```csharp
s1.FirstName = "Sakul";
s1.LastName = "Saladpuk";
s1.Age = 18;
s1.Id = "01";
```

### 👨‍🚀 Access Modifiers

คือตัวที่ใช้บอกว่าตัวแปรในคลาสนั้นๆ เปิดสิทธิ์ให้คนภายนอกเรียกใช้แบบไหนได้บ้าง ซึ่งมีทั้งหมด 6 ชนิด

| No | Access modifier    | ความหมาย                                                      |
| -- | ------------------ | ------------------------------------------------------------- |
| 1  | public             | เปิดให้ทุกคนเข้าใช้งานได้                                     |
| 2  | private            | ให้เฉพาะคนในคลาสมันเองใช้งานได้เท่านั้น                       |
| 3  | protected          | ให้เฉพาะคลาสมันเอง และ คลาสลูกเท่านั้น                        |
| 4  | internal           | ภายใน assembly เดียวกันเท่านั้นถึงใช้งานได้                   |
| 5  | protected internal | ภายใน assembly เดียวกัน หรือ คลาสลูกที่ต่าง assembly เท่านั้น |
| 6  | private protected  | ภายใน assembly เดียวกัน หรือคลาสลูกเท่านั้น                   |

{% hint style="warning" %}
ถ้าไม่เตรียมไปสอบ ก็ไม่ต้องไปนั่งจำมันหรอก ใช้ๆไปเดี๋ยวก็จำได้ทั้งหมดเอง แต่สิ่งที่ควรจะจำเป็นพื้นฐานเลยคือ **public** กับ **private** เท่านั้นก่อนนะจ๊ะ
{% endhint %}
