On this page
מערך שיעור: מבוא ל-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 שדיברתם עליו — לא קוד מכונה, אלא קוד ביניים.