ABA


"C# מתי כדאי להשתמש ב struct ומתי עדיף להשתמש ב class?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11015 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11015
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   09:09   18.11.12   
אל הפורום  
  C# מתי כדאי להשתמש ב struct ומתי עדיף להשתמש ב class?  
 
   הבנתי ש struct יושב ב stack ו class ב heap.
ותאכלס, מה המסקנה?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בעיקרון במחלקות אתה משתמש כשיש לך מורכבות ואתה מעוניין לנצל Nesher  18.11.12 10:50 1
     תודה אחי dvir8 19.11.12 08:21 2
         בכיף.. Nesher  19.11.12 11:34 3
     ואם העצמים פשוטים ביותר תשתמש גם ב- enum :) sharkk 19.11.12 18:27 4
         Enum זה יותר כשיש לך רשימה של intים או דגלים Nesher  19.11.12 19:55 5
             קראתי את המאמר, dvir8 19.11.12 23:56 6
                 דבר ראשון ב-C אין בכלל מחלקות אז זה לא מקור להשוואה כל כך :) Nesher  20.11.12 13:53 7
                     תודה על התגובה, dvir8 21.11.12 00:33 8
  עוד שיקול קטן.. VeNom  24.11.12 19:37 9

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   10:50   18.11.12   
אל הפורום  
  1. בעיקרון במחלקות אתה משתמש כשיש לך מורכבות ואתה מעוניין לנצל  
בתגובה להודעה מספר 0
 
את כל נושא התיכנות מונחה העצמים

ב-struct אתה תשתמש כשיש לך מבני נתונים פשוטים שמצריכים גישה מהירה בזכרון
(אם תשים לב שרוב הטיפוסים הפשוטים הם structים)

אבל במקום רק לסמוך עליי, תקרא קצת מאמרים בנושא
http://msdn.microsoft.com/en-us/library/ms173109.aspx


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   08:21   19.11.12   
אל הפורום  
  2. תודה אחי  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   11:34   19.11.12   
אל הפורום  
  3. בכיף..  
בתגובה להודעה מספר 2
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sharkk
חבר מתאריך 2.9.02
1306 הודעות
   18:27   19.11.12   
אל הפורום  
  4. ואם העצמים פשוטים ביותר תשתמש גם ב- enum :)  
בתגובה להודעה מספר 1
 
   נכון שאין קשר בינהם אבל הרבה אנשים שוכחים את ה- enum


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   19:55   19.11.12   
אל הפורום  
  5. Enum זה יותר כשיש לך רשימה של intים או דגלים  
בתגובה להודעה מספר 4
 
ואתה צריך להפריד למקרים מסויימים
למשל מין של בן אדם אז יהיה לך Enum
public enum SexEnum
{
Male = 1,
Female = 2
}

בכלליות
אבל זה סוג של טיפוס יחסית פשוט בסופו של דבר
אבל יש לזה באמת יתרון על פני דברים אחרים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   23:56   19.11.12   
אל הפורום  
  6. קראתי את המאמר,  
בתגובה להודעה מספר 5
 
   למען האמת, עדין אין הכרעה כל כך.
שאלתי את אחד המתכנתים אצלנו והוא טען שאם יש התנהגות עדיף class.
והקשתי עליו כשאמרתי שגם ב struct אתה יכול להוסיף התנהגות, מטודות, בנאים, כי מדובר ב C# ולא שפת C.

ואז הוא אמר ש class יושב ב heap לעומת struct שיושב ב stack.
ואני אשמח אם מישהו יכול להסביר לי כמה זה חשוב איפה זה יושב כשמדובר בתוכנות סטנדרטיות ולא בכיפת ברזל?
כמה זה באמת משמעותי?

זה כמו שיש תכנות unsafe. אם אתה הולך לתכנת unsafe למה שתשתמש ב C#?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   13:53   20.11.12   
אל הפורום  
  7. דבר ראשון ב-C אין בכלל מחלקות אז זה לא מקור להשוואה כל כך :)  
בתגובה להודעה מספר 6
 
דבר שני זה עניין קצת יותר מורכב, רוב המקומות בכל מקרה אתה תשתמש במחלקות
על אף ש-structs נותנים לך כל מיני יכולות שיש גם במחלקות
יש יתרונות למחלקות שאין להם, למשל תיצור struct אתה תהיה חייב לאתחל לו את הנתונים אחרי היצירה או בזמן היצירה
לעומת מחלקה שאתה יכול להכניס נתונים בכל שלב של ההרצה אם בכלל


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   00:33   21.11.12   
אל הפורום  
  8. תודה על התגובה,  
בתגובה להודעה מספר 7
 
   נכון לכרגע אני פשוט אתעלם מ struct כל עוד יש התנהגות.
עד שיום אחד מישהו ישכנע אותי אחרת


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   19:37   24.11.12   
אל הפורום  
  9. עוד שיקול קטן..  
בתגובה להודעה מספר 0
 
   מבנים כמו POINT שיש בהם 2 INTS או כמו PIXEL שיש בהם 3 BYTES עדיף לעשות כ STRUCT. הסיבה היא דווקא באיך הזכרון מחזיק אותם.

כמו ששמעת VALUE TYPE יושב על הSTACK ורפרנס טייפ יושב בHEAP..אז זה נכון..אבל צריך לדייק.

שאתה מקצה REFERENCE TYPE מה שיושב על ה STACK זה כתובת בעצם ובHEAP יושב לך האובייקט עצמו. כאשר אתה יוצר VALUE TYPE אז הערך שלו יושב ישירות ה STACK.

עכשיו נניח ואתה יוצר מופע של CLASS PIXEL:
ישב לך 32 ביט כתובת על ה STACK ועוד 24 ביט ב HEAP. סה"כ יותר מפי-2 זכרון הוקצה כאן אם בחרת לייצג פיקסל כקלאס ולא כסטראקט. עכשיו דברים כמו פיקסל ופיונט בד"כ באים בקבוצות..בכל תמונה יש לך מיליוני פיקסלים שאתה מקצה הרבה יותר זכרון אם אתה מחזיק אותם כקלאסים..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net