פורסם 2012 במרץ 813 שנים יש לי תוכנה שאליה אני מצרף קבצים, את הקבצים אני קורא אחד אחרי השני, מידי פעם כאשר הקובץ הבא שאמור להיקרא ולהיכנס לעבודה יגיע עם דיליי מסויים של כמה שניות אני רוצה שטיימר יכנס לפעולה ויספור אחורנית (יציג את הספירה בלייבל)לשם כך ב-CLASS שמריץ את הקבצים יצרתי פרופרטי מסוג double שמציין את מספר הזמן בשניות מתי הקובץ הבא יגיע ואבנט: public event EventHandler _largeWait; public double _delayTime; public double _Delay { get { return _Delay; } set { _Delay = value; if (value > 5 && _largeWait != null) { _largeWait(this, EventArgs.Empty); } } }בתוך ה-CLASS איך שהקובץ הבא יגיע בדיליי מסויים שהחלטתי (מעל 5 שניות) אני מכניס ערך למשתנה ה-double: if (delayTime > 5000) { _Delay = delayTime; _largeWait += (s, e) => { if (_largeWait != null) { _largeWait(s, e); } }; }ובת'רד הראשי (אני עובד על Winform): public void method() { ClassName._largeWait += (s, e) => { timer.Tag = s; timer.Start(); }; }הבעיה שלי היא שבתוך ה-CLASS בדוגמא השנייה איפה שאני מכניס את הערך למשתנה ה-double זה נכנס לרקורסיה ואין לי מושג למה.
פורסם 2012 במרץ 813 שנים כי יש לך רקורסיה ב-get/set של Delay_ - אתה לא משתמש בכלל ב-delayTime.חוץ מזה, טיפ קטן: הקונבנציה היא קו התחתון למשתנים פרטיים. Delay_ הוא לא פרטי, ולכן לא צריך להיות לו קו תחתון.
פורסם 2012 במרץ 813 שנים שים לב שהגישה ל-Delay_ ניגשת ל-Delay_. זו הרקורסיה שלך. הפתרון: Delay_ לא צריך להשתמש ב-Delay_, אלא באיבר הפרטי של המחלקה שנועד להחזיק את הערך.
פורסם 2012 במרץ 813 שנים שים לב שהגישה ל-Delay_ ניגשת ל-Delay_. זו הרקורסיה שלך. הפתרון: Delay_ לא צריך להשתמש ב-Delay_, אלא באיבר הפרטי של המחלקה שנועד להחזיק את הערך.שניצל, אני לא זוכר מה בדיוק MS עשו שם, אבל יש משהו ב dotNet 4 שלא מצריך אותך להשתמש בשדות אמיתיים כשאתה משתמש ב get-set.אני חושב שהתחביר הוא פשוט עם המילה השמורה value במקום _Delay, אבל שווה לבדוק את זה...בכל מקרה הרעיון הוא להחליף את השורה הקיימת ב - קוד טפשי שנמחקואני מאמין ההחלפה ב:get;תספיק.
פורסם 2012 במרץ 813 שנים מחבר אוקיי יצרתע עוד משתנה ועכשיו זה נראה ככה: public event EventHandler _largeWait; public double _num; public double _delayTime; public double _Delay { get { return _Delay; } set { _num = value; if (value > 5 && _largeWait != null) { _largeWait(this, EventArgs.Empty); } } }ו: if (delayTime > 3000) { _num = delayTime; _largeWait += (s, e) => { if (_largeWait != null) { _largeWait(s, e); } }; }עכשיו התוכנית לא נופלת אבל לפונקציה שנקראת method (בדוגמא האחרונה בהודעה שלי) זה לא נכנס
פורסם 2012 במרץ 813 שנים קודם כל, תיקנת רק את הבעיה ב-set, ולא ב-get.חוץ מזה, לא ברור לי בכלל איפה אתה מפעיל את קטע הקוד השני שכתבת כאן, ומתי אתה ומה הוא בכלל אמור לעשות. מה הלוגיקה שלך כאן?שניצל, אני לא זוכר מה בדיוק MS עשו שם, אבל יש משהו ב dotNet 4 שלא מצריך אותך להשתמש בשדות אמיתיים כשאתה משתמש ב get-set.ואני מאמין ההחלפה ב:get;תספיק.זה עובד רק אם המימוש שלך הוא דיפולטי. כלומר, את הקוד הזה:private double _delay;public double Delay { get { return _delay; } set { _delay = value; }}אפשר להחליף בזה:public double Delay { get; set;}ברגע שאתה רוצה להוסיף קוד נוסף ל-get/set אז אי אפשר להשתמש במימוש הדיפולטי.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.