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