C# משתנה סטטי

24sharon

New member
C# משתנה סטטי

פונקציה בונה סטטית construcrot static, מתי היא מאותחלת?, אם היא נמצאת בתוך מחלקה, האם בקריאת מחלקה על ידי המשתמש הראשון, היא מאותחלת? האם בטעינת האפליקציה? לא הבנתי בדיוק מתי היא מאותחלת? אם יש מחלקה עם משתנה סטטי. - ברירת המחדל לשם הדוגמא הוא 5. נאמר יש אפשרות להפחית 1 מערך המשתנה הסטטי על ידי המשתמשים. ויש 3 משתמשים מחוברים. האם התוצאה של ערך המשתנה הסטטי אצל המשתמשים הוא 2 (ז"א כל אחד הפחית 1 ולכן 5-1-1-1=2) או 4 - משתנה סטטי פר משתמש. (5-1=4) נמשיך ונאמר שהמשתמשים סגרו את האפליקציה ועכשיו היא נפתחת מחדש על ידי משתמש רביעי, מה ערך המשתנה הסטטי, 5 - כמו ברירת המחדל - או 2 כמו מה שהותירו אחריהם המשתמשים הקודמים. קצת אור ומידע על הנושא יעזור לי להבין.
 

מתכNET

New member
!

"פונקציה בונה סטטית construcrot static, מתי היא מאותחלת?, " לפני היצירה הראשונה של המחלקה או קריאה ל פונקציה סטטית אחרת במחלקה. " נאמר יש אפשרות להפחית 1 מערך המשתנה הסטטי על ידי המשתמשים. ויש 3 משתמשים מחוברים. האם התוצאה של ערך המשתנה הסטטי אצל המשתמשים הוא 2 (ז"א כל אחד הפחית 1 ולכן 5-1-1-1=2) או 4 - משתנה סטטי פר משתמש. (5-1=4)" המשתנה הסטטי "שייך" למחלקה ולא למשתמש,לשאלתך התשובה תהיה 2. "נמשיך ונאמר שהמשתמשים סגרו את האפליקציה ועכשיו היא נפתחת מחדש על ידי משתמש רביעי, מה ערך המשתנה הסטטי, 5 - כמו ברירת המחדל - או 2 כמו מה שהותירו אחריהם המשתמשים הקודמים. קצת אור ומידע על הנושא יעזור לי להבין. " כמו כל משתנה רגיל הערך שלו לא נשמר אם אתה לא שומר אותו.
 

24sharon

New member
אז רק עוד כמה שאלוניות להבהרה

1. מה ההבדל בין השלושה שנמצאים ביחד, לרביעי שהגיע לחוד. אם השלושה היו אחד אחרי השני. האם כל עוד המחלקה פתוחה אצל משתמש אחד ואח"כ נכנס משתמש אחר, וכו' כל המשתמשים רואים את אותו ערך סטטי, לאחר יציאתם מהתוכנית (נאמר נגמרו הקריאות למחלקה) המשתנה מאותחל עם הקריאה הראשונית. (אני חושבת בצורה WEBית) 2. שאלה בנושא שונה System.Array.BinarySearch גיליתי אותו לראשונה ופשוט מומלץ לעבוד איתו על מנת לחפש ערך בתוך מערך. העניין הוא שיש לי מטלה למיין מערך לפי System.Array.BinarySearch, איך אפשר לעשות זאת? תודה!
 

מתכNET

New member
הניסוח שלך קצת מקשה...

מה זה מחלקה פתוחה? ואיך בדיוק משתמש אחר נכנס למערכת? בעקרון הנחתי שאם כולם יצאו מהמערכת המערכת הפסיקה לעבוד?! אם זה לא כך אז הבא שיכנס גם יקבל ערך אחד פחות. System.Array.BinarySearch: http://msdn2.microsoft.com/en-us/library/y15ef976.aspx
 

24sharon

New member
אנסה למקד יותר את השאלה

יש לי מחלקה עם משתנה סטטי, פונקציה בונה סטטית, ופונקציה בונה רגילה. דוגמא למחלקה הנה:
class myClass { static public int i; static myClass() { i=100; } public myClass() { i++; } }​
יש לי דף מסוים, שלמשל לחיצה על לחצן מפעילה את הקלאס הזה.
myClass mc = new myClass();​
לאחר מכן נכנס משתמש שני ומפעיל את אותו לחצן, מה ערך הi יהיה (משתמש ראשון + שני?) לאחר יממותיים נכנס משתמש שלישי ולוחץ על אותו לחצן, מה יהיה ערך ה-i? מתי מאופס הערך והפונקציה הבונה הסטטית מופעלת. מקווה שהובנתי. לגבי System.Array.BinarySearch, ראיתי את הדף הזה, הוא מוצג כתוצאה 1-2 בגוגל. השאלה הייתה איך אפשר לבצע מיון עם הפעולה הזו, וזה גם לא נמצא בקישור. תודה ויום טוב.
 

rnan

New member
../images/Emo189.gif בבקשה

במצב סטטי כאשר המשתמש השני ייכנס הערך יהיה החיבור של הערכים אני לא צריך להגיד לך שמשתנה סטטי לא תלוי פר מופע אובייקט הוא עוד מאוכלס עוד לפני ה EXECUTION גם אם עוד שנה ייכנס משתמש וייעשה , הערך יעלה ב 1 מדוע ? משתנים סטטים חיים כל עוד שהפרוסס עובד , במקרה הזה כל עוד שתהליך ה IIS עובד ופועל . זה גם הסיבה למה לא קישרו ב 1.1 DLL עבור SESSION ספציפי. לגבי הפיתרון : הדרך היחידה לאפס משתנה STATIC זה פשוט לשנות את ה PAGE SOURCE CODE וכך קורה מצב ש VS מזהה שינוי בדף ועושה REBUILD לדף ואז המשתנה מתאפס. בייייייייייייייייייי
 

24sharon

New member
הבנתי, כך גם חשבתי

אז באיזשהו מקום נשמר הערך הסטטי? האם זה נשמר על השרת? השימוש במשתנה סטטי נשמע בזבזני, לא? תודה!
 

rnan

New member
../images/Emo189.gif ()

ערך ה STATIC נשמר בשרת השימוש ב STATIC הוא כמו SWITCH עצבני של התוכנה לפעמים אני רוצה שמשתמשים יוכלו להיכנס לאתר אבל רק לנתיבים מסויימים כי אני עושה בשניים עבודה של שיפוץ אז אני משתמש ב STATIC ואז כולם רואים את זה ופועלים בעקבות זה. בכללי יש הרבה מאוד שימושים כמו למשל CONNECTION STRING תסכימי איתי שיהיה מאוד כיף לשנות במקום אחד מרכזי........ ביייייייייי
 

rnan

New member
../images/Emo189.gif לא שאלת אבל אני יענה

אובייקט ה APPLICATION נבנה מלכתחילה ב DOT NET בשביל לאפשר התאמה בין DOT NET ASP לבין CLASSIC ASP. וזאת בשביל להקל על ה"מיזוג" מ CLASSIC ASP קוד לתוך קוד של ASP DOT NET. בכללי, אם אתה בונה אפליקציה ASP NET , עדיף להשתמש ב STATIC ולא ב APPLICATION עקב ביצועים אתה סתם תעמיס על אובייקט APPLICATION. בייייייייייייייייייי
 

blue25

New member
תשובה

משתנה סטטי הוא משתנה גלובלי לכל מי שמשתמש במחלקה הנ"ל, בפנייה הראשונה למחלקה ה static constructor מאותחל אחריו המשתנים הפנימיים. המשתנה ה static יחייה ויהיה גלובלי לכל המשתמשים כל עוד האפליקצייה שלך חיה, כלומר כל עוד הworker process שלך חי (w3wp). ברגע שהworker process מת (למשל התבצע recycle ב application pool), בפעם הבאה שמשתמש ייכנס לאפליקציה ה assembly יעלה מחדש והמשתנה יאותחל מחדש. הבהרה: כל עוד ה process של האפליקציה שלך חי, כל המשתמשים יגשו לאותו משתנה static והןא לא יאותחל שוב !!!
 
למעלה