עבור לתוכן

שמירת וטעינת נתונים c#

Featured Replies

פורסם
  • מחבר

הכנתי מחלקה שמכילה מאפיינים שיחזיקו את הנתונים כל זמן שהתוכנה פועלת, אני רוצה ליצור משתנה שיכיל את סה"כ הוצאות/ הכנסות שהיו עד עכשיו, איך עושים את זה? ניסיתי לעשות משתנה total סטטי ציבורי, אבל הוא לא מופיע לי כשאני מנסה לקרוא לו דרך המופע של המחלקה.

איך עושים את זה?

זה הקוד

  • תגובות 36
  • צפיות 12.7k
  • נוצר
  • תגובה אחרונה
פורסם

הקוד שלך לא מתקמפל.

חוץ מזה:

א. נהוג ששם של מחלקה מתחיל באות גדולה.

ב. אל תעשה abuse ל-get/set. הם נועדים לעשות מה שצפוי שהם יעשו - set אמור לקבוע משתנה (ולדרוס את הערך ששמור שם) ו-get אמור להחזיר את מה ששמור שם. ספציפית, אם אני מבצע Details.total = 10 פעם אחת או שאני מבצע את השורה הזו פעמיים, אני מצפה שהתוצאה תהיה זהה.

נערך על-ידי שניצל

פורסם
  • מחבר

מה הבעיה איתו?

פורסם
  • מחבר

כן, לא הייתה שום בעיה.

עריכה: שניה עכשיו הוא כותב לי 4 שגיאות, 2 לגבי זה שאי אפשר להשתמש בout על מאפיינים, אבל זה לא בעיה, הוא כותב may not והוא כתב לי את זה גם על textBox וזה עבר יפה מאוד, ועוד 2 על זה שמשום מה צריך להגדיר גם את גוף הget, הגדרתי את הget והו הוריד את ההערות האלה, נשארתי רק עם ה2 הראשונות שאפשר להתעלם מהם לבינתיים.

נערך על-ידי eido300

פורסם

אז יש פה בעיה, כי הקוד לא אמור להתקמפל. אולי לא שמרת את הקובץ או משהו. כנראה בגלל זה הוא לא מכיר את השינויים שלך.

אי אפשר לממש רק את ה-set ולא את ה-get. חייבים לממש את שניהם.

פורסם

עדיף שלא יהיו לך warnings בקוד, במיוחד אם זה משהו שאתה יכול לתקן על ידי שינוי קטן.

פורסם
  • מחבר

הנה הקוד, שיניתי את הget

הקוד שלך לא מתקמפל.

חוץ מזה:

א. נהוג ששם של מחלקה מתחיל באות גדולה.

ב. אל תעשה abuse ל-get/set. הם נועדים לעשות מה שצפוי שהם יעשו - set אמור לקבוע משתנה (ולדרוס את הערך ששמור שם) ו-get אמור להחזיר את מה ששמור שם. ספציפית, אם אני מבצע Details.total = 10 פעם אחת או שאני מבצע את השורה הזו פעמיים, אני מצפה שהתוצאה תהיה זהה.

א. צודק ,שיניתי.

ב. לא מבין מה זה abuse אבל אני מבין שהתכוונת לset של הtotal, זה לא אמור להפריע, מכיוון שאף אחד לא אמור לכתוב לtotal אלא רק לקרוא ממנו את הסה"כ שהצטבר עד עכשיו.

ג. איך לתקן? להוסיף עוד משתנה ש"יתווך" ביניהם?

נערך על-ידי eido300

פורסם

ב. הקוד צריך להיות קריא, לא רק ע"י מי שמשתמש במחלקה Details, אלא גם על ידי מי שיצטרך להשתמש בה בעתיד. תחשוב על זה שעוד שנה אתה תסתכל על הקוד הזה ולא תזכור מה בדיוק עושה המשתנה הזה total.

ג. כן. חוץ מזה, אם TryParse יכולה להיכשל אז אתה צריך להתייחס לאופציה הזו... (אם אתה לא מתייחס אז כבר עדיף להשתמש ב-Parse שתזרוק חריגה במקרה הצורך).

פורסם
  • מחבר

ב. אז מה לעשות? לפרט בהערה מה בדיוק הוא עושה (בשביל זה יש הערות, לא?) או פשוט לשנות את הערך שלו בבנאי?

ג. תודה, אבל האמת שהתכוונתי להוסיף בהמשך משפט if שיבדוק את הפלט, אבל כרגע אני קודם כל רוצה שהקוד יעבוד.

ד. כרגע הקוד משום מה לא עובד, כנראה אחד הלחצנים מסרב לעשות את תפקידו.

List<Details> detailL = new List<Details>();

private void save_Click(object sender, EventArgs e)
{
MessageBox.Show("test");
detailL.Add(new Details(sumTb.Text, detailCb.Text, dateTb.Text, noteTb.Text));
MessageBox.Show(detailL[0].sum + "\r\n" + detailL[0].date + "\r\n" + detailL[0].detaile);
}

זה שהוא לא מראה אפילו את הmessageBox הראשונה כנראה שמישום מה הוא לא פועל, ככה שאני לא יכול לדבאג את זה ולראות אם באמת יש בעיה בקימפול ואיפה.

[ATTACH]8445[/ATTACH]

זה כל הפרוייקט, אם זה עוזר.

פורסם

ב. כמו שאמרתי, תשים לזה פונקציה ייעודית. תעשה get/set דיפולטיים, ותגדיר לך פונקציה בשם addToTotal או משהו כזה.

ד. אתה בטוח שהפונקציה רשומה לאירוע בצורה נכונה? אתה יכול לשים שם breakpoint כדי לבדוק אם היא נקראת.

פורסם
  • מחבר

הרישום לאירוע נעשה אוטומטית ע"י הקומפלייר ע"י לחיצה כפולה על הלחצן, אני רק הוספתי את התוכן, וזה שהmessageBox לא הופיעה מראה שהלחצן לא מתפקד.

פורסם

זה לא הקומפיילר, זה ה-IDE. אבל זה לא משנה. תנסה למחוק את הפונקציה ולהתחיל מההתחלה.

פורסם
  • מחבר

עשיתי את זה כמה פעמים אפילו הכנסתי את זה ללחצן אחר

פורסם

וידאת שהקוד בכלל נקרא? (ע"י הוספת breakpoint או הדפסה)

אולי אתה בכלל לא שומר את הפרוייקט, או שהפרוייקט לא מתקמפל? (ואז הוא מריץ את הקוד הישן, לפני השינוי)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים