מחלקות סטטיות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 13 מתוך 70.
כאשר מחלקה מכילה רק איברים סטטיים ואין צורך ליצור ממנה מופעים, אפשר להכריז על המחלקה כולה בתור static. כך מודיעים למהדר שלא ניתן ליצור מופעים של המחלקה ושהיא יכולה להכיל רק איברים סטטיים.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}משתמשים במחלקות סטטיות באותו אופן שבו משתמשים באיברים סטטיים, על ידי קריאה אליהם ישירות בשם המחלקה:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;למחלקות סטטיות יש מגבלות חשובות. אי אפשר ליצור מופע באמצעות new, לא יכולים להיות להן בנאים של מופעים, ואי אפשר לרשת מהן. הן יכולות להכיל רק שדות, מאפיינים ומתודות סטטיים.
המחלקות Console ו-Math שבהן השתמשת הן דוגמאות מושלמות למחלקות סטטיות. הן מספקות פונקציונליות שימושית בלי להזדקק למצב של אובייקט. מחלקות סטטיות מתאימות במיוחד לקיבוץ של מתודות עזר או קבועים קשורים שאינם דורשים נתונים ספציפיים למופע.
אתגר
קלבואו נבנה כלי להמרת טמפרטורות באמצעות מחלקה סטטית, כדי לקבץ שיטות עזר קשורות שאינן דורשות מצב של אובייקט.
תיצרו שני קבצים כדי לארגן את הקוד:
TemperatureConverter.cs: הגדירו מחלקה סטטית בשםTemperatureConverterבמרחב השמותUtilities. המחלקה צריכה להכיל:- שדה סטטי
AbsoluteZeroCelsiusשערכו-273.15 - שיטה סטטית
CelsiusToFahrenheit(double celsius)שממירה מעלות צלזיוס למעלות פרנהייט באמצעות הנוסחה:(celsius * 9 / 5) + 32 - שיטה סטטית
FahrenheitToCelsius(double fahrenheit)שממירה מעלות פרנהייט למעלות צלזיוס באמצעות הנוסחה:(fahrenheit - 32) * 5 / 9 - שיטה סטטית
IsAboveAbsoluteZero(double celsius)שמחזירהtrueאם הטמפרטורה גבוהה מהאפס המוחלט
- שדה סטטי
Program.cs: בקובץ הראשי, השתמשו במחלקה הסטטית לביצוע ההמרות. קראו מהקלט ערך טמפרטורה במעלות צלזיוס, ואז הציגו את ההמרות ואת בדיקת התקינות.
תקבלו קלט אחד: ערך טמפרטורה במעלות צלזיוס.
הדפיסו את התוצאות בפורמט הבא:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}Cלדוגמה, אם הקלט הוא 25, הפלט צריך להיות:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15Cזכרו שאי אפשר ליצור מופעים של מחלקות סטטיות — יש לקרוא לכל השיטות ישירות באמצעות שם המחלקה, למשל TemperatureConverter.CelsiusToFahrenheit(25).
נסו בעצמכם
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// קראו את הטמפרטורה במעלות צלזיוס
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: השתמשו בשיטות הסטטיות של TemperatureConverter כדי:
// 1. להמיר celsius לפרנהייט
// 2. להמיר fahrenheit בחזרה לצלזיוס
// 3. לבדוק אם הטמפרטורה מעל האפס המוחלט
// 4. לקבל את קבוע האפס המוחלט
// TODO: הדפיסו את התוצאות בפורמט הנדרש:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין