NET/מבנים
תכנות בסביבת NET |
---|
|
מבנה הוא סוג מוגבל של מחלקה. בניגוד למחלקה, שנשמרת בזיכרון הערימה (heap), המבנה נשמר בזכרון המחסנית (stack). זאת משום שבעוד המחלקה היא מסוג ייחוס, המבנה הוא מסוג ערך, ויורש מן המחלקה ValueType. לכן כאשר מגדירים מחלקות פשוטות, המכילות מספר שגרות מצומצם ואינן נדרשות לירושה, מומלץ להשתמש במבנה ולא במחלקה, משום שהגישה אל משתנה ערך מהירה יותר.
תחביר
עריכהבשפת #C נשתמש במילת המפתח struct
על מנת להגדיר מבנה. בשפת VB.NET נשתמש במילת המפתח Structure
.
C#:
// variables
// properties
// methods
// events
VB.NET:
' variables
' properties
' methods
' events
בנאי
עריכההמהדר יוצר לכל מבנה בנאי ברירת מחדל (שאינו מקבל פרמטרים) באופן אוטומטי, המאתחל את משתני המופע לערכי ברירת המחדל שלהם (0 למספרים, false למשתנים בוליאניים, null למשתנים מסוג ייחוס). לכן לא ניתן לכתוב בנאי ברירת מחדל בעצמנו, אך נוכל לכתוב בנאי המקבל פרמטרים, למשל כדי לבצע איתחול משלנו למשתנים אלה.
בנוסף, לא ניתן לאתחל משתנה מופע של בנאי עם הכרזתו, כמו שניתן לבצע במחלקה. הקוד הבא אינו תקף:
C#:
private String = "some string";
במקום זאת, יש לבצע את האיתחול בתוך הבנאי.
הורשה
עריכהיכולתם של מבנים לרשת ולהוריש מוגבלת. מבנים יכולים לממש ממשקים (Interfaces), אך הם אינם יכולים לרשת ממחלקות אחרות או ממבנים אחרים, ולא ניתן לרשת מהם. הם יורשים ישירות ממחלקת ValueType, כאמור.
דוגמאות
עריכהדוגמה 1: מערך של משתנים.
עריכהבאם ברצוננו ליצור מערך של אוסף משתנים מקובץ, המבנה אידאלי לשם כך. ראשית אנו צריכים להגדיר מבנה טיפוס בשם vRecentFiles שיהיה מורכב משלשה משתנים. הראשון שם הקובץ (FullName), השני האם נבחר (Checked) והשלישי האם מיועד למחיקה (DeletedFile), ולאחר מכן להגדיר משתנה מערך בשם RecentFiles מסוג הטיפוס vRecentFiles .
Public Structure vRecentFiles
Dim FullName As String
Dim Checked As Boolean
Dim DeletedFile As Boolean
End Structure
Public RecentFiles(10) As vRecentFiles
לאחר ההגדרה של המערך, הגישה לאיבר הראשון תהיה באופן הבא:
RecentFiles(0).FullName="c:\new.txt"
דוגמה 2: יצירת סטופר שיאפשר לנו למדוד זמן ביצוע של קטעי קוד.
עריכהPublic Structure Stoper
Private start_time As DateTime
Private stop_time As DateTime
Private elapsed_time As TimeSpan
Public Sub StartNow()
start_time = Now
End Sub
Public Sub StopNow()
stop_time = Now
End Sub
Public Function ElapsedTime() As TimeSpan
elapsed_time = stop_time.Subtract(start_time)
Return elapsed_time
End Function
Public Function GetElapsedTimeInSeconds() As String
elapsed_time = stop_time.Subtract(start_time)
Return elapsed_time.TotalSeconds.ToString("0.000")
End Function
End Structure
שימוש. תחילה יש להגדיר משתנה מסוג Stoper
Public Stoper1 As Stoper
לאחר מכן יש להפעילו באמצעות שיטת StartNow ולהפסיקו באמצעות שיטת StopNow
Stoper1.StartNow()
Stoper1.StopNow()
בכדי לקבל את התוצאה יש לבצע השמה למחרוזת באמצעות שיטת GetElapsedTimeInSeconds
Dim TheSeconds As String = Stoper1.GetElapsedTimeInSeconds()