مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

تغییر مقدار متغیر سراسری

دوشنبه, 30 دی 1398 01:23

تغییر مقدار متغیر سراسری

سلام. در ابتدا عرض کنم مبتدی هستم .

یک public static class تعریف کردم که داخلش یک متغیر به نام f از نو باز هم public decimal تعریف شده.

تابع دوم به صورت public decimal هم نوشتم

تابع سوم  از نوع public void دارم که باید از تابع اول و کلاس بالایی استفاده کنه .

حالا مشکلم اینه که با هر بار فراخوانی تابع سوم مقدار متغیری که داخل کلاس هست صفر میشه. متغیر f1....... یعنی مقدار پیش فرض اولیش در صورتی که من نمیخوام هر بار مقدار پیش فرضش درش قرار بگیره.


 

ممنون میشم راهنماییم کنید. اگر لازمه تا کد رو قرار بدم.

public partial class Form1 : Form
    {
         public static class FinalPrice
        {
            public static decimal f1=0,f2=0,f3=0,f4=0,f5=0;
            public static string stime1,stime2,stime3,stime4,stime5;
            public static Boolean a1=true, a2;
        }
        public decimal concate(string a , string b) {
            string x,y;
            decimal z;
            decimal result;
            x = a.Substring(0, 2);
            y = a.Substring(3, 2);
            z =Convert.ToDecimal( a.Substring(6, 2));
            result =((( (Convert.ToInt32(x) * 60) + Convert.ToInt32(y)+((z)/60))* Convert.ToInt32(b))/60) ;
            
            return Math.Ceiling(result);


        }


        public void Next(string a, Timer tt, System.Diagnostics.Stopwatch ss,decimal f,string c,Boolean aa,ListBox l,string b,string d,string st)
        {
            if (a.Length > 0)
                if (MessageBox.Show("آیا از ثبت زمان فعلی و شروع زمان جدید اطمینان دارید ؟ ", " هشدار ", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    tt.Stop();
                  
                    f = Convert.ToDecimal(c);
                    ss.Reset();
                    switch(aa)
                    {
                        case true:
                            {
                                l.Items.Add("Start: " + a + " ==>  End: " + DateTime.Now.ToString("HH:mm") + " ==? Cost: " + Convert.ToString(concate(b, d)));
                                aa = false;
                                st = DateTime.Now.ToString("HH:mm");
                                break;
                            }
                        case false :
                                l.Items.Add("Start: " + st + " ==>  End: " + DateTime.Now.ToString("HH:mm") + " ==> Cost: " + Convert.ToString(concate(b, d)));
                                st = DateTime.Now.ToString("HH:mm");
                            break;

                        
                            
                    }
                        
                    
                    
                
                c = "";
                b = "";

                tt.Start();
                ss.Start();


                }

دوشنبه, 30 دی 1398 08:13

سلام

نکات زیر را دقت کن:

متغیرهایت را بصورت پراپرتی نگه دار نه متغیر ساده. اینجوری:

public static decimal f{get;set;}

و حتمن هم آنها را استاتیک کن

مورد دوم اینکه متدهایت را هم استاتیک کن.

البته بنده بطور کلی با نگهداری متغیرها بصورت سراسری کاملا مخالفم

کسانی که از این پست تشکر کرده اند : persianboy_333,
دوشنبه, 30 دی 1398 09:00

تو استفاده از متغییر Static خیلی دقت کن

این نوع متغیر برای همه کاربرا هست و استفاده میشه و هر کاربری که مقدارش رو تغییر بده برای همه تغییر میکنه

از سشن یا امثال این استفاده کن راحت تری

من خودم روزای اول کارم یه پروژم بخاطر متغییر سراسری رفت رو هوا با نظر AmirGhasem کاملا موافقم

کسانی که از این پست تشکر کرده اند : persianboy_333,
یکشنبه, 06 بهمن 1398 00:57

سلام. من برنامه ناقصی رو که نوشتم میفرستم. ممنون میشم بیشتر راهنماییم کنید. پیشاپیش از کدنویسی داغونم عذرخواهی میکنم :)))) برنامه 2 قسمت داره فعلا ( پلی استیشن 1 و پلی استیشن 2). برنامه توی قست 2 درست اجرا میشه. ولی توی قسمت 1 که از توابع و کلاس استفاده کردم تا حجم کدنویسیم کمتر بشه و چندین کد چندین جا تکرار نشه ایرادی وجود داره که نمیدونم چجوری حلش کنم. مراحل اجرا بصورت زیر : اول توی قسمت 1 روی ریدیو باتن یک نفره کلیک و سپس روی دکمه شروع کلیک کنید. زمانبندی شروع میشه. بعدش روی دکمه ی (بعدی) کلیک کنید. دو سه بار تا نتایج ثبت بشه توی لیست باکس پایینش. حالا همین مراحلو توی قسمت 2 انجام بدید. نتایج ثبت شده رو مقایسه کنید. دلیل وجود اشکال توی قسمت 1 زمانی که روی دکمه ی (بعدی) کلیک میکنم و باعث میشه دوتا تکست باکس صفر بشه چیه؟ ممنون از راهنماییتون

دانلود فایل ضمیمه

دوشنبه, 21 بهمن 1398 20:38

دوستان خیلی واسم مهمه کسی نمیتونه کمکم کنه؟sad

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید