By Reference / By Value

בטיטi

New member
../images/Emo41.gif By Reference / By Value

אמנם #C, אך אני מניח שהעקרונות זהים... אם הבנתי נכון, שלחית משתנים פרימיטיבים (int, long וכו') המוקצים על המחסנית - מועברים By Value ואילו שליחת משתנים המוקצים על הערימה (אובייקטים למניהם) - מועברים By Reference 1. מה ההבחנה הנכונה, האם מיקום ההקצאה (Stack או Heap) קובע האם ההעברה תהיה By Val או By ref ? 2. מה לגבי Struct ולגבי String ? 3. האם הוספת ref לפני שליחת הפרמטר בעצם מעבירה מצביע ? 4. מה ההבדל בין ref ל out ?
 

בטיטi

New member
../images/Emo41.gif שאלה נוספת : sealed

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

user32

Well-known member
מנהל
לגבי sealed

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

עידו פ

New member
שאלה שיותר מתאימה לפורום דוטנט

אבל מצאתי מאמר מצוין שמסביר : http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91 לגבי סעיף 4 - ישירות מה-MSDN: The out keyword causes arguments to be passed by reference. This is similar to the ref keyword, except that ref requires that the variable be initialized before being passed.
 
למעלה