# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.saladpuk.com/beginner-1/csharp101/intermediate/class.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
