היי שאלה לגבי STRINGS

486dx2

New member
היי שאלה לגבי STRINGS

קראתי פעם פה שאמרו ש STRINGS זה VALUE TYPE וקראתי גם במקום אחר שהם REF TYPE אז ניסיתי לעשות תוכנית שלוקחות STRING ושולחת לפונקצייה ששם היא משנה את הערך אבל כשחזרתי מהפונקציה הערך לא השתנה אז איזה REF זה ??? זה היה אמור לשנות אותו ... מישהוא יכול לבאר לי את החיים ? וחוצ מזה מה ההבדל בין CAST / CONVERSION לבין BOX ?????
 

J u n k y

New member
קודם כל

string הוא reference type. והוא גם immutable, כלומר: ברגע שהוא נוצר, מת, אי אפשר לשנות אותו. ז"א אם "שלחת string לפונקציה ששם היא משנה את הערך" - אחד מהשניים: 1) חשבת ששינית את הערך אבל לא שינית 2) בפונקציה דרסת את המצביע ל - string. כתובת המצביע עוברת by val ולכן השינוי לא תופס ביציאה מהפונקציה. boxing/unboxing עטיפה/הוצאה מעטיפה של value type. כך עושים casting מ - value type ל - reference type ולהיפך. עוטפים אותו ב - class.
 

ג81

New member
אבל string הוא base type, לא?

לא כל מה ש-base type מועבר by value?
 

J u n k y

New member
לא

class מועבר by ref struct מועבר by val base type לפי מיטב ידיעתי רק אומר שהוא מוגדר ב - typedef (כלומר: string ו - String מתייחס לאותו type) ושאפשר לעשות עליו switch-case. אין קשר בין base type ל - by val.
 

Zeliran

New member
באותו נושא..

אפשר להעביר אובייקט ref באמצעות by value? או שחייבים ליצור איזה copy ctor?
 
למעלה