new !

123Action

New member
new !

בעת הגדרת משתנה, ניתן להגדירו רק ע"י הטיפוס שלו, כגון myClass a. לפי מה שאני יודע, הגדרה כזו, ללא new, רק מצהירה על המשתנה, אבל לא מקצה לו זכרון. כלומר, לאחר הפקודה myClass a יש לי בתוכנית משתנה בשם a מסוג myClass, אבל עדיין לא ניתן להשתמש בו (התוכנית תעוף), מכיוון שהוא אינו מצביע לשום מקום ולשום Instance של myClass. רק לאחר שנבצע ()a = new myClass, אך יוקצה לו זכרון מה Heap וניתן יהיה להשתמש בו. למען הדיוק, אם אינני טועה, למשתנה a מוקצה זכרון במחסנית, ושם שמורה כתובת הזכרון המוקצה ל Insance עצמו, ב Head. בנוסף, כאשר מגדירים משתנה "פשוט" כגון int, אין צורך לבצע new, מכיוון שזהו משתנה בעל גודל ידוע, וההקצאה (מהמחסנית) מתבצעת אוטומטית. ראשית כל, תקנו אותי אם טעיתי במשהו שכתבתי למעלה, זה השאלה העקרית
השאלה המישנית שלי היא, האם גם string נחשב משתנה "פשוט", שאין צורך ב new ? (מכיוון שאני רואה שנית להגדירו, ומיד השתמש בו, ללא new)
 

Zeliran

New member
אני לא בטוח, אבל..

בקשר לשאלה השניה.. לא ממש בדקתי את זה ב C#, אבל אני יודע שבפסקל למשל, את יכול להקצות מה יהיה האורך המקסימלי של ה string כך שאפשדר לשנות כמה זיכרון הוא יתפוס ב heap.. בכל מקרה.. נראה לי שהם גם נחשב למשתנה "פשוט", אבל זו רק השערה..
 

אוהדד

New member
../images/Emo35.gif עוד שאלה (אחרת) ../images/Emo35.gif

אני עובד ללא תצוגת עיצוב, עבדתי על מסמך ה aspx, הוספתי שם כמה תגים של <asp:Button> <asp:TextBox> ועוד. שמרתי את המסמך. להפתעתי, כאשר עברתי לקובץ ה cs, ראיתי שחלק מהתגים שהגדרתי, כבר הוגדרו לי אוטומטית כמשתני private של העמוד, וחלק לא. מה האלגוריתם ?
מתי Visual Studio מוסיף אוטומטית, ומתי לא ?
 

אוהדד

New member
אבל אני לא עובד עם ה Designer...

כתבתי שאני לא משתמש בתצוגת העיצוב בכלל.
 

gilad g

New member
...

"ראשית כל, תקנו אותי אם טעיתי במשהו שכתבתי למעלה, זה השאלה העקרית
" אתה לא טועה.. ולמען המשך הדיון - משתנים "רגילים" כגון int, char, float נקראים value types, ומשתנים שמוקצים בזיכרון הדינמי (אובייקטים) הם reference types (הם מועברים בין מתודה למתודה by reference). "השאלה המישנית שלי היא, האם גם string נחשב משתנה "פשוט", שאין צורך ב new ? (מכיוון שאני רואה שנית להגדירו, ומיד השתמש בו, ללא new)" string הוא מעיין משתנה ביניים. קודם כל, הוא value type, כלומר הוא מועבר by value. אבל למרות שהוא value type, הוא מוקצה על הזיכרון הדינמי (heap). כמו שאמרת, אין צורך לעשות לו new. כשאנחנו כותבים:
string s = "Hello World!";​
ה-CLR עושה לך את ה-new אוטומטית. לקריאה נוספת (הוא מסביר את זה יותר טוב ממני
)
 
למעלה