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

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

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

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


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותשאלו: “מה בעצם קורה כשאתם לוחצים Run?” — אספו השערות בלי לתקן
הבעיה: מחשב לא מבין C#10 דקותהראו קובץ .cs גולמי — “המעבד לא יודע לקרוא את זה”
הרעיון: קומפילציה + CLR15 דקותשרטוט זרימה: קוד מקור → IL → CLR מריץ (JIT)
הדגמה חיה: dotnet CLI20 דקותdotnet new console, dotnet run, dotnet build — הראו את ההבדל בפועל
Main / Top-level statements10 דקותהראו את שתי הצורות, הסבירו שהן שקולות
תרגול מודרך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 שדיברתם עליו — לא קוד מכונה, אלא קוד ביניים.