# מערך שיעור: מבוא ל-C# ו-.NET📋 מערך מרצה

משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יבינו מה קורה בפועל בין כתיבת קוד C# להרצתו, ויתחילו לעבוד עם .NET CLI בביטחון.

בסוף השיעור הסטודנטים צריכים: להסביר בקצרה מה זה קומפילציה ומה זה CLR, ליצור ולהריץ פרויקט קונסולה חדש עצמאית, ולדעת מתי להשתמש ב-`dotnet build` לעומת `dotnet run`.

דגש קריטי: לא לצלול לפרטי המימוש הפנימי של ה-CLR — המטרה היא מודל מנטלי פשוט (קוד → IL → CLR מריץ), לא הרצאה במימוש runtime.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | שאלו: "מה בעצם קורה כשאתם לוחצים Run?" — אספו השערות בלי לתקן |
| הבעיה: מחשב לא מבין C# | 10 דקות | הראו קובץ `.cs` גולמי — "המעבד לא יודע לקרוא את זה" |
| הרעיון: קומפילציה + CLR | 15 דקות | שרטוט זרימה: קוד מקור → IL → CLR מריץ (JIT) |
| הדגמה חיה: dotnet CLI | 20 דקות | `dotnet new console`, `dotnet run`, `dotnet build` — הראו את ההבדל בפועל |
| Main / Top-level statements | 10 דקות | הראו את שתי הצורות, הסבירו שהן שקולות |
| תרגול מודרך | 20 דקות | כל סטודנט יוצר פרויקט ומריץ עצמאית |
| שאלות + סיכום | 10 דקות | חיזרו על "שני שלבים: build ואז run" |

---

## דגשים להעברת השיעור

- התחילו מהבעיה ("מחשב לא מבין C#") לפני שמזכירים את המילה "CLR" בכלל — אחרת זה נשמע כמו הגדרת מילון.
- הדגישו שה-cross-platform (רץ על Windows/Linux/Mac בלי שינוי) הוא **תוצאה ישירה** של השכבה הנייטרלית (IL), לא "עוד פיצ'ר" נפרד.
- אם יש סטודנטים עם רקע ב-Java — האנלוגיה ל-JVM/Bytecode עובדת מצוין ומקצרת הסבר.
- לוודא שלכולם `dotnet --version` עובד בתחילת השיעור, לפני שמתחילים בהדגמה — חוסך זמן debugging סביבתי באמצע.

---

## מושגים

**Compilation** — הפיכת קוד מקור לקוד ביניים שאפשר להריץ.
**IL (Intermediate Language)** — קוד ביניים נייטרלי-פלטפורמה, תוצר הקומפילציה.
**CLR** — סביבת הריצה של .NET; מריצה IL בפועל, כוללת JIT ו-Garbage Collector.
**JIT (Just-In-Time)** — תרגום IL לקוד מכונה תוך כדי ריצה, לא מראש.
**.NET CLI** — כלי שורת הפקודה (`dotnet`) לניהול פרויקטים.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אם הייתם צריכים להסביר למישהו בלי רקע טכני למה תוכנית C# יכולה לרוץ גם על Windows וגם על Mac בלי שינוי בקוד — מה הייתם אומרים?"

**מהלך:** תנו לסטודנטים 2 דקות לנסח תשובה בזוגות. אספו כמה תשובות. הובילו לכיוון: "כי הקוד לא מתורגם ישר לשפת המעבד — הוא מתורגם לשפת-ביניים אחידה, וכל מערכת הפעלה יודעת לתרגם אותה לשפה שלה בזמן אמת".

**מה המרצה מראה בסוף:** הריצו את אותו קובץ IL (למשל דרך `dotnet MyApp.dll` על שתי מכונות שונות אם יש גישה, או לפחות הראו את קובץ ה-`.dll` שנוצר ב-`bin/` והסבירו שזה בדיוק ה-IL שדיברתם עליו — לא קוד מכונה, אלא קוד ביניים.
