לדלג לתוכן

NET/מבנים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
< NET
תכנות בסביבת NET








מבנה הוא סוג מוגבל של מחלקה. בניגוד למחלקה, שנשמרת בזיכרון הערימה (heap), המבנה נשמר בזכרון המחסנית (stack). זאת משום שבעוד המחלקה היא מסוג ייחוס, המבנה הוא מסוג ערך, ויורש מן המחלקה ValueType. לכן כאשר מגדירים מחלקות פשוטות, המכילות מספר שגרות מצומצם ואינן נדרשות לירושה, מומלץ להשתמש במבנה ולא במחלקה, משום שהגישה אל משתנה ערך מהירה יותר.

תחביר

[עריכה]

בשפת #C נשתמש במילת המפתח struct על מנת להגדיר מבנה. בשפת VB.NET נשתמש במילת המפתח Structure.

C#:

[ [modifier] [modifier] ... struct StructName {

// variables
// properties
// methods
// events

}

VB.NET:

[ [modifier] [modifier] ...] Structure StructureName

' variables
' properties
' methods
' events

End Structure

בנאי

[עריכה]

המהדר יוצר לכל מבנה בנאי ברירת מחדל (שאינו מקבל פרמטרים) באופן אוטומטי, המאתחל את משתני המופע לערכי ברירת המחדל שלהם (0 למספרים, false למשתנים בוליאניים, null למשתנים מסוג ייחוס). לכן לא ניתן לכתוב בנאי ברירת מחדל בעצמנו, אך נוכל לכתוב בנאי המקבל פרמטרים, למשל כדי לבצע איתחול משלנו למשתנים אלה.

בנוסף, לא ניתן לאתחל משתנה מופע של בנאי עם הכרזתו, כמו שניתן לבצע במחלקה. הקוד הבא אינו תקף:

C#:

sturct MyStruct {

  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()