MYSTERY ZILLION တွင် English သို့မဟုတ် Unicode ဖြင့်သာ အသုံးပြုခွင့်ရှိသည်။ ဇော်ဂျီ ၊ ဧရာ စသည်တို့ကို အသုံးပြုခွင့် မရှိ။ Unicode fonts များမှာ Mon3,Yunghkio, Myanamr3 စသည်များ အသုံးပြုနိုင်သည်။ Unicode Guide ကို ဒီမှာ Download ချပါ။ Zawgyi to Unicode Converter
Don't share ebook or software if nobody request. You can find free book websites on here. We are welcome for discussion or asking question instead.

basic basic basic of C#

2

မှတ်ချက်များ

  • edited August 2009 Registered Users
    အစ်ကိုရေ...အစ်ကို့ရဲ့ပိုစ့်တွေကိုစောင့်ပြိးဖတ်နေပါတယ်...
    ဆက်လက်ပြိးတော့ တင်ပေးပါအုံးလို့တောင်းဆိုချင်ပါတယ်..
    :6::5::5:
  • edited August 2009 Registered Users
    အစ်ကိုဆက်ပြီးတော့ရေးပေးပါ။ C# ကိုသင်တန်းတက်ဖူးပါတယ်။ဒါပေမယ့်နောက်ပိုင်းဆက်မလုပ်ဖြစ်တော့ဘူး။ဒီ Mysteryzillion ထဲကိုရောက်မှအစ်ကို့ ပို့စ် ကိုဖတ်ပြီးပြန်လေ့လာဖြစ်နေတယ်။ ဒီလိုပညာတွေကို Share ပေးတဲ့အတွက်တစ်ကယ်ကျေးဇူးတင်တယ်။ လိုုက်ပြီးတော့လဲ step by step လိုုက်လုပ်ကြည့်နေပါတယ်။ဆက်ပြီးတော့ရေးပေးပါအစ်ကို။Post အသစ်တွေထပ်တင်ပေးပါ .........
  • edited August 2009 Registered Users
    [FONT=&quot]ဆောရီးဗျာ… အိမ်မှာ အလှူလုပ်တာနဲ့ အလုပ်တွေရှုပ်သွားလို့။ ဒီနေ့ ကျွန်တော်တို့ looping တွေ အကြောင်း ဆက်ရအောင်။ looping ဆိုတာဘာလဲ…. အလုပ်တစ်ခုကို ထပ်တလဲလဲ လုပ်တာကို loop လိုခေါ်တယ်။ ဥပမာဗျာ ကျွန်တော်က screen မှာ လိုင်း၁လိုင်းမှာ star(*) တစ်လုံးပါတဲ လိုင်း ၁၀လိုင်းရိုက်ပြချင်တယ် ဆိုပါတော့။ ဒါကိုရေးမယ်ဆိုရင် Console.WriteLine(“*”); ဆိုတာကို ၁၀ခါရေးရမှာပေါ့။ ဟုတ်တယ်မလား။ ဒီလို ၁၀ခါမရေးပဲ ၁ခါပဲရေးပြီး အဲ့ဒီ statement ကိုပဲ ၁၀ကြိမ်လုပ်ပေးပါလို့ compiler ကိုခိုင်းချင်ရင် ကျွန်တော်တို့ looping ကိုသုံးရတော့မှာပါ။ C# မှာ looping ၄ မျိုးရှိပါတယ်။[/FONT]
    [FONT=&quot]၁။ while[/FONT]
    [FONT=&quot]၂။ do - while[/FONT]
    [FONT=&quot]၃။ for[/FONT]
    [FONT=&quot]၄။ foreach[/FONT]
    [FONT=&quot]looping ဆိုရင် တော်တော်များများ သုံးကြတာက for loop ပါ။ looping တွေမှာ looping variable ဆိုတာလေး များသောအားဖြင့်ရှိကြပါတယ်၊ ဥပမာ looping ၁၀ကြိမ်လုပ်မယ်ဆိုရင် လက်ရှိမှာ ဘယ်နှစ်ကြိမ်ရှိပြီလဲဆိုတာ မှတ်ပေးထားမယ့် variable လေးပေါ့။ looping အလုပ်လုပ်ဖို့အတွက် အဓိက အချက် ၃ချက် သိရပါမယ်။ loopng variable လေး ဘယ်ကစပြီး အလုပ်လုပ်မလဲ ဆိုတဲ့ start ရယ်၊ ဘယ်အချိန်ထိအလုပ်လုပ်မလဲဆိုတဲ့ stop ရယ်၊ ဘယ်လို တိုးသွားမလဲဆိုတဲ့ step ရယ်ပေါ့။ ဒီ၃ချက်ကို for looping မှာ ဒီလိုရေးပါတယ်…[/FONT]
    [FONT=&quot]  for( [COLOR=Magenta]start[/COLOR]; [COLOR=Magenta]stop[/COLOR]; [COLOR=Magenta]step [/COLOR])[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          statements;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Example:[/FONT]
    [FONT=&quot]  for( int i = 1; i<=10;  i++ )[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          Console.WriteLine(“*”);[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]start ဆိုတာ looping variable လေး စကြေငြာပြီး တန်ဖိုးတစ်ခုထည့်ပေးလိုက်တဲ့ အပိုင်းဖြစ်ပါတယ်။ stop ဆိုတာကတော့ condition တစ်ခုဖြစ်ပြီး၊ အဲ့ဒီ condition မှာ မှန်နေသရွှေ့ looping က အလုပ်လုပ်နေမှာပါ။ step အပိုင်းမှာတော့ looping variable ထဲကို ပြောင်းသွားချင်တဲ့ တန်ဖိုးတခုခုထည့်ပေးရပါတယ်။ အပေါ်က ဥပမာမှာ looping variable ထဲထတန်ဖိုးကို ၁တိုးသွားချင်လို့ i++ လိုရေးတာပါ။ တခါတလေ start အပိုင်းကို looping ရဲ့ အပေါ်မှာလည်း ရေးတာတွေ့ဖူးမှာပါ။ ဒီလိုပါပဲ step ကိုလည်း looping statements တွေထဲမှာ ထည့်ရေးလို့ရပါတယ်။ ဒါဆိုရင် ဒီလိုလေး ဖြစ်သွားမှာပေါ့။[/FONT]
    [COLOR=Magenta][FONT=&quot]
      start;[/FONT][/COLOR]
      [FONT=&quot]for( ; [COLOR=Magenta]stop[/COLOR]; )[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          statements;[/FONT]
      [FONT=&quot]          [COLOR=Magenta]step[/COLOR];[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Example:[/FONT]
    [FONT=&quot]  int i = 1;[/FONT]
      [FONT=&quot]for( ; i<=10; )[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          Console.WriteLine(“*”);[/FONT]
      [FONT=&quot]i++;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]အခုရေးပြလိုက်တဲ့ for looping လေးကို while looping နဲ့ ပြောင်းရေးမယ်ဆိုရင်တော့ ဒီလိုဖြစ်သွားပါမယ်။[/FONT]
    [FONT=&quot][COLOR=Magenta]
      start[/COLOR];[/FONT]
      [FONT=&quot]while ( [COLOR=Magenta]stop [/COLOR])[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          statements;[/FONT]
      [FONT=&quot]          [COLOR=Magenta]step[/COLOR];[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Example:[/FONT]
    [FONT=&quot]   int i = 1;[/FONT]
      [FONT=&quot]while( i<=10 )[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          Console.Write(“*”);[/FONT]
      [FONT=&quot]          i++;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ကဲ… အဲ့ဒီ while loop လေးမှာပါတဲ့ while() လေးကို အောက်ကိုပို့ပြီးရေးမယ် ဆိုရင်တော့ do-while လေးက ဒီလိုပုံစံပါ။[/FONT]
    [FONT=&quot][COLOR=Magenta]  start[/COLOR];[/FONT]
      [FONT=&quot]do{[/FONT]
      [FONT=&quot]          statements;[/FONT]
      [FONT=&quot]          [COLOR=Magenta]step[/COLOR];[/FONT]
      [FONT=&quot]}while( [COLOR=Magenta]stop [/COLOR]);[/FONT]
    
    [FONT=&quot]Example:[/FONT]
      [FONT=&quot]int i = 1;[/FONT]
      [FONT=&quot]do{[/FONT]
      [FONT=&quot]          Console.WriteLine(“*”);[/FONT]
      [FONT=&quot]          i++;[/FONT]
      [FONT=&quot]}while( i<=10 );[/FONT]
    
    [FONT=&quot]do-while looping မှာ condition စစ်တဲ့ အလုပ်ကို နောက်ဆုံးမှာ ရေးလိုက်တော့ condition မှန်သည်ဖြစ်စေ၊ မှားသည်ဖြစ်စေ အနည်းဆုံးတစ်ကြိမ်တော့ looping ထဲက statement တွေကို အလုပ်လုပ်သွားမှာပါ။ for loop နဲ့ while loop ကတော့ မှားရင် တစ်ကြိမ်မှ အလုပ်လုပ်မှာ မဟုတ်ပါဘူး။[/FONT]
  • edited August 2009 Registered Users
    [FONT=&quot]တခါတလေ ကျွန်တော်တို့ Looping တွေထဲမှာ looping variable မပါတာမျိုးလည်း ရှိပါတယ်။ looping ကို အကြိမ်အရေအတွက် အတိအကျ မဟုတ်ပဲ looping variable မပါတဲ့ looping မျိုး သုံးဖို့ လိုလာပြီ ဆိုရင်တော့ while နဲ့ do-while ကိုသုံးလေ့ရှိပါတယ်။ ဥပမာ.. ကျွန်တော်က user ဆီက character တစ်လုံးလက်ခံမယ်၊ ပြီးရင် အဲ့ဒီ character ရဲ့ ASCII value ကိုပြန်ပြီးထုတ်ပြပေးမယ်။ ဒီအလုပ်ကိုပဲ user ကြိုက်သလောက် လုပ်နိုင်တယ်။ မလုပ်ချင်တော့ဘူးဆိုရင် ESC key နှိပ်ပြီးထွက်ရမယ်။ ဟုတ်ပြီနော် ဒီ program လေးရေးကြည့်ရအောင်။[/FONT]
      [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]forlooptest[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]bool[/COLOR] stop = [COLOR=blue]false[/COLOR];[/FONT]
      [FONT=&quot]        [COLOR=blue]do[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Enter a char to see ASCII value of it (or) press ESC to close."[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]ConsoleKeyInfo[/COLOR] cki = [COLOR=#2b91af]Console[/COLOR].ReadKey();[/FONT]
      [FONT=&quot]            [COLOR=blue]if[/COLOR] (cki.Key != [COLOR=#2b91af]ConsoleKey[/COLOR].Escape)[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\n{0} = {1}\n"[/COLOR], cki.Key.ToString(), ([COLOR=blue]int[/COLOR])cki.KeyChar);[/FONT]
      [FONT=&quot]            [COLOR=blue]else[/COLOR][/FONT]
      [FONT=&quot]                stop = [COLOR=blue]true[/COLOR];[/FONT]
      [FONT=&quot]        } [COLOR=blue]while[/COLOR] (stop==false);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒီ program လေးမှာ looping ဆက်လုပ်မလား မလုပ်တော့ဘူးလား ဆိုတာကို stop ဆိုတဲ့ boolean variable လေးနဲ့ ထိန်းထားတယ်။ default value အနေနဲ့ false ထည့်ပေးထားတယ်(program မပိတ်ဖူးလို့ ဆိုလိုတာပေါ့) user ဆီကနေ key တစ်ခုထဲလက်ခံမယ်ဆိုရင် Console.ReadKey() function ကိုသုံးရတယ်။ သူက ConsoleKeyInfo ဆိုတဲ့ structure လေး return ပြန်တယ်။ အဲ့ဒီ ConsoleKeyInfo structure ထဲမှာ Key ဆိုတဲ့ property က user ရိုက်လိုက်တဲ့ ConsoleKey အမျိုးအစားဖြစ်ပြီး၊ KeyChar ကတော့ character ပြန်ထုတ်ပေးတယ်။ ဒါကြောင့် user ရိုက်လိုက်တဲ့ key က Escape နဲ့ မတူဘူးဆိုရင် user ကို output ထုတ်ပြတယ်။ တူတယ်ဆိုရင်တော့ program ပိတ်ဖို့အတွက် stop ထဲကို true ထည့်ပေးလိုက်တယ်။ နောက်ဆုံးမှ while condition မှာ stop ထဲက တန်ဖိုးဟာ false နဲ့ ညီလား စစ်လိုက်တယ်။ ညီရင် looping ကို နောက်တစ်ခေါက်ပြန်လုပ်မယ်။ မညီဘူးဆိုရင် program ပိတ်သွားမှာပါ။[/FONT]


    [FONT=&quot]foreach looping[/FONT]
    [FONT=&quot]foreach looping ကို collection(အစုအေ၀း) တစ်ခုအတွင်းမှာ ရှိသလောက် အားလုံး လုပ်ချင်တယ်ဆိုရင် သုံးလေ့ရှိပါတယ်။ array ထဲမှာ ရှိသလောက်လုပ်ချင်တယ်၊ class ထဲက property တွေအားလုံးလုပ်ချင်တယ်၊ ဒီလို အခြေအနေမျိုးမှာ foreach loop ကိုသုံးပါတယ်။ ဥပမာ.. MZ member တွေအားလုံးကို တစ်ယောက် laptop တစ်လုံး လက်ဆောင်ပေးချင်တယ် ဆိုရင် foreach ကိုသုံးပြီး ဒီလို ရေးရမှာပါ.. :D[/FONT]
      [FONT=&quot]foreach( People p in MZ.Member )[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          p = “a laptop”;[/FONT]
      [FONT=&quot]}[/FONT]
      
    
    [FONT=&quot]foreach ကိုသုံးလိုက်ခြင်းအားဖြင့် MZ ထဲမှာ member ဘယ်လောက်ရှိလဲ ဆိုတာကို သိနေစရာ မလိုတော့ပါဘူး။ member မကုန်မချင်း ဒီ looping က အလုပ်လုပ်မှာပါ။ foreach looping မှာတော့ start တွေ stop တွေ step တွေ မလိုပါဘူး။ in keyword ရဲ့ ရှေ့မှာ colletion အတွင်းမှာ ရှိတဲ့ value တွေရဲ့ datatype ကိုကြေငြာရပြီး in ရဲ့ နောက်မှာတော့ collection name ကိုပေးရပါတယ်။ အခု foreach ကိုသုံးပြီး program လေးတစ်ခု ရေးကြည့်ရအောင်။ ကျွန်တော်က user ဆီက စာကြောင်းတစ်ကြောင်းလက်ခံမယ်။ ပြီးရင် အဲ့ဒီ စာကြောင်းထဲမှာ ရှိတဲ့ character တွေရဲ့ ASCII value ကို ပြန်ပြီး ပြမယ်။[/FONT]
      [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]forlooptest[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
                [COLOR=blue][FONT=&quot]string[/FONT][/COLOR][FONT=&quot] st;[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Enter a string : "[/COLOR]);[/FONT]
      [FONT=&quot]            st = [COLOR=#2b91af]Console[/COLOR].ReadLine();[/FONT]
      [FONT=&quot]            [COLOR=blue]foreach[/COLOR] ([COLOR=blue]char[/COLOR] c [COLOR=blue]in[/COLOR] st)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0} = {1}"[/COLOR], c, ([COLOR=blue]int[/COLOR])c);[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      
    
  • edited August 2009 Registered Users
    Thank you very much for your post....I will continue to study..
  • edited August 2009 Registered Users
    ကျွန်တော်က c, fortran, vb လောက်တော့ သိတယ်။ oop ရဲ့ general သဘောတရားလေး နဲနဲ ရှင်းပြပေးပါလား။ thanks :)
  • edited August 2009 Registered Users
    ကျွန်တော်က c, fortran, vb လောက်တော့ သိတယ်။ oop ရဲ့ general သဘောတရားလေး နဲနဲ ရှင်းပြပေးပါလား။ thanks :)
    သိပ်အများကြီးတော့ မသိဘူးဗျ။ သိသလောက်တော့ နောက်ပိုဒ့်တွေမှာ လာမယ်။ ခဏတော့ စောင့်ပေးပါ။
  • edited August 2009 Registered Users
    အစ်ကိုရေ ကျေးဇူးပါပဲ..ကျနော် Form အဆင့်ဆင့်ချိပ်တာရသွားပြိ...မသိတာရှိရင်ဆက်ပြိးမေးပါ့မယ်..
    ဆက်လက်ပြိးတော့ကူညီပေးပါအုံး...:103::103::103:
  • edited August 2009 Registered Users
    Form2 ထဲမှာ Constructor အသစ်တခုဆောက်ရမယ်။
    public Form2(int value)
    {
    Initial.........Co....();
    textBox1.Text = value.ToString();
    }
    အစ်ကိုရေ အစ်ကိုပြောထားတဲ့ Initial.........Co....(); ဒါလေးကလေ..InitializationComponent(); fun လား
    အဲ့ဒါလေးသိချင်လို့ပါ..
  • edited August 2009 Registered Users
    အစ်ကို ပြောတဲ့အတိုင်းလိုက်စမ်းကြည့်တာရသွားပြိ...နားလည်သွားပြိ...ကျေးဇူးအစ်ကို..
  • edited August 2009 Registered Users
    soe.ksa wrote: »
    အစ်ကို ပြောတဲ့အတိုင်းလိုက်စမ်းကြည့်တာရသွားပြိ...နားလည်သွားပြိ...ကျေးဇူးအစ်ကို..

    ကျွန်တော်ပြောတာတွေကို သေသေချာချာ လိုက်ပြီးစမ်းရေးတာကို ကျေးဇူးတင်ပါတယ်။ ကျွန်တော်လည်း ရေးရတာ အားရှိတာပေါ့။ :)
  • edited August 2009 Registered Users
    အစ်ကိုရေ အစ်ကို့ရဲံပို့စ်တွေမတင်ဖြစ်တာကြာပြိနော်..အလုပ်များနေလို့ထင်တယ်..တင်ပေးပါအုံးနော်
  • edited August 2009 Registered Users
    ကျွန်တောင် အရင်က ဂျာဗား နဲနဲ စီ++ နည်းနညး်လုပ်ဖူးတယ် ခင်ဗျ။
    အိုင်တီနဲ့တော်တော် အဆက်အသွယ် ပြတ်သွားတယ် တခြား အလုပ်တခုကြောင့်။
    အခုမှ ကိုယ်၀ါသနာပါတာကို ပြန်လုပ်မလို့ပါ ခင်ဗျ။
    အခု ပထမဆုံး C# စမယ်ဆိုပြီးလုပ်နေတာလေ အဲဒါ အကို့ Post ကိုတွေ့လိုက်တော့ ပျော်သွားတယ် ခင်ဗျ။ကျေးဇူးတင်ပါတယ် အကိုရေ။ကျွန်တော် မြန်မြန် လိုက်ဖတ်မယ်ခင်ဗျ။ အခုတောင် သင်တာကြာပြီထင်တယ်နော်။ကျွန်တော် အကို သင်သလောက် ရအောင်ဖတ်ပြီးအမှီလိုက်ခဲ့ပါ့မယ်။
    ကျေးဇူးတင်ပါတယ် အကိုရေ ...............
  • edited August 2009 Registered Users
    [FONT=&quot]အခု ကျွန်တော်တို့ C# မှာ သုံးလို့ရတဲ့ Array တွေအကြောင်း လေ့လာရအောင်။ C# မှာ array အမျိုးအစား တော်တော်စုံစုံလင်လင်ကို သုံးလို့ရပါတယ်။ အရင်ဆုံး ကျွန်တော်တို့ သိပြီးသား single dimension array လေးကနေ စလိုက်ရအောင်။ ကျွန်တော်က integer value ၅ ခုသိမ်းဖို့အတွက် array လေးတစ်ခု ဆောက်ချင်ရင် ခုလိုကြေငြာရမှာပါ။[/FONT]
    [FONT=&quot]int[ ] arr = new int[5];[/FONT]
    
    [FONT=&quot]ပြီးရင် အဲ့ဒီ array ထဲကို တန်ဖိုး ၅ခု ထည့်ချင်တယ်ဆိုရင် ခုလိုရေးရမယ်။[/FONT]
    
      [FONT=&quot]arr[0] = 2;[/FONT]
      [FONT=&quot]arr[1] = 4;[/FONT]
      [FONT=&quot]arr[2] = 6;[/FONT]
      [FONT=&quot]arr[3] = 8;[/FONT]
      [FONT=&quot]arr[4] = 0;[/FONT]
    
    [FONT=&quot]နောက်တစ်နည်းအားဖြင့် array ကြေငြာနေတုန်းမှာ တန်းဖိုးကိုပါ ထည့်ပေးလိုက်ချင်တယ်ဆိုရင် လည်းရပါတယ်။ အဲ့ဒါကို array initialization လို့ခေါ်ပါတယ်။ ဒီလိုမျိုးပါ….[/FONT]
    [FONT=&quot]int[ ] arr = new int[ ] { 2, 4, 6, 8, 0 };[/FONT]
    
    [FONT=&quot]အခုလိုမျိုး statement တစ်ကြောင်းထဲမှာ array declaration ရော initialization ပါ ပေါင်းလုပ်မယ်ဆိုရင် နောက်တစ်မျိုးက ဒီလိုလည်း ရေးလို့ ရပါတယ်…[/FONT]
    [FONT=&quot]int[ ] arr = { 2, 4, 6, 8, 0 };[/FONT]
    
    [FONT=&quot]ဒါပေမယ့် statement ၂ ကြောင်းခွဲရေးမယ်ဆိုရင်တော့ new int[ ] ဆိုတဲ့ အပိုင်းလေးကို မထည့်လို့ မရပါဘူး။
    [/FONT]
    
      [FONT=&quot]int[ ] arr;                                    // declaration statement[/FONT]
      [FONT=&quot]arr =[B] new int[ ][/B] { 2, 4, 6, 8, 0 };  // initialization statement[/FONT]
    
    [FONT=&quot]example လေး တစ်ခုလောက် ရေးကြည့်ရအောင်..[/FONT]
    
      [COLOR=blue][FONT=&quot]    using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [FONT=&quot]    [COLOR=blue]class[/COLOR] [COLOR=#2b91af]forlooptest[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]        {            [/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][] arr1 = { 1, 3, 5, 7, 9 };[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][] arr2 = { 2, 4, 6, 8, 0 };[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][] arr3 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][5];[/FONT]
      [FONT=&quot]            [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i < arr1.Length; i++)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                arr3[i] = arr1[i] + arr2[i];[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Result array : "[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=blue]foreach[/COLOR] ([COLOR=blue]int[/COLOR] v [COLOR=blue]in[/COLOR] arr3)[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].Write(v + [COLOR=#a31515]" "[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]    }[/FONT]
    
  • edited August 2009 Registered Users
    [FONT=&quot]multi-dimension array ဆိုတာကတော့ dimension တစ်ခုထက်ပိုပါတဲ့ array လို့ ဆိုလိုတာပေါ့ :) ။ dimension တစ်ခုစီကို ( , ) လေးနဲ့ ခံပြီးရေးပေးရပါတယ်။[/FONT]
    [FONT=&quot]int[,] arr = new int[3,2];[/FONT]
    
    [FONT=&quot]အခု ကြေငြာလိုက်တဲ့ array လေးမှာ dimension ၂ ခုပါပြီး၊ ပထမ dimension မှာ ၃ ခန်း၊ ဒုတိယ dimension မှာ ၂ ခန်း၊ ယူသွားပါမယ်။ [/FONT]
    [FONT=&quot]တန်ဖိုးထည့်မယ်ဆိုရင်…[/FONT]
    [FONT=&quot]
       arr[0,0] = 1;[/FONT]
      [FONT=&quot]arr[0,1] = 2;[/FONT]
      [FONT=&quot]arr[1,0] = 3;[/FONT]
      [FONT=&quot]arr[1,1] = 4;[/FONT]
      [FONT=&quot]arr[2,0] = 5;[/FONT]
      [FONT=&quot]arr[2,1] = 6;[/FONT]
    
    [FONT=&quot]multidimensional array တွေကိုလည်း initialize လုပ်လို့ရပါတယ်။ ဒီလိုမျိုးပါ…[/FONT]
       [FONT=&quot]int[,] arr = [B]{[/B] {1,2} [B],[/B] {3,4} [B],[/B] {5,6} [B]} [/B];[/FONT]
    
    [FONT=&quot]multidimensional array တွေကို looping ပတ်မယ်ဆိုရင်တော့ dimension အရေအတွက်ပေါ်မူတည်ပြီး loopingတွေ ရေးရမှာပါ။[/FONT]
       [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][FONT=&quot] ([COLOR=blue]int[/COLOR] i = 0; i <= arr.[B]GetUpperBound[/B](0); i++)[/FONT]
      [FONT=&quot]{[/FONT]
      [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][FONT=&quot] ([COLOR=blue]int[/COLOR] j = 0; j <= arr.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                        [COLOR=#2b91af]Console[/COLOR].Write(arr[i, j]+[COLOR=#a31515]" "[/COLOR]);[/FONT]
      [COLOR=#2b91af][FONT=&quot]Console[/FONT][/COLOR][FONT=&quot].WriteLine();[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]GetUpperBound [/FONT][FONT=&quot]function လေးက demension တစ်ခုရဲ့ upperbound တန်ဖိုးကို return ပြန်ပါတယ်။ ဒါကြောင့် ကိုယ်သိချင်တဲ့ dimension index လေးကို parameter ထည့်ပေးရပါတယ်။[/FONT]
    [FONT=&quot]အခုကျွန်တော်တို့ matrix 2 ခု မြှောက်တဲ့ program လေး ရေးကြည့်ရအောင်။ နည်းနည်းတော့ ရှည်ပြီး ရှုပ်မယ်ထင်တယ် :D[/FONT]
    [COLOR=blue][FONT=&quot]    using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [FONT=&quot]    [COLOR=blue]class[/COLOR] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]static[/COLOR] [COLOR=blue]int[/COLOR] GetInteger()[/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]try[/COLOR][/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]return[/COLOR] [COLOR=#2b91af]Convert[/COLOR].ToInt32([COLOR=#2b91af]Console[/COLOR].ReadLine());[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=blue]catch[/COLOR][/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]return[/COLOR] 1;[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]        [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main([COLOR=blue]string[/COLOR][] args)[/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR] r1, r2, c1, c2;[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][,] matrix1;[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][,] matrix2;[/FONT]
      [FONT=&quot]            [COLOR=blue]int[/COLOR][,] matrix3;[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"First Matrix\n************"[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"row : "[/COLOR]);[/FONT]
      [FONT=&quot]            r1 = GetInteger();[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"col : "[/COLOR]);[/FONT]
      [FONT=&quot]            c1 = GetInteger();[/FONT]
      [FONT=&quot]            matrix1 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][r1, c1];[/FONT]
      
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine();[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Second Matrix\n************"[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"row : "[/COLOR]);[/FONT]
      [FONT=&quot]            r2 = GetInteger();[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"col : "[/COLOR]);[/FONT]
      [FONT=&quot]            c2 = GetInteger();[/FONT]
      [FONT=&quot]            matrix2 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][r2, c2];[/FONT]
      
      [FONT=&quot]            [COLOR=blue]if[/COLOR] (!((r1 == 1 && c1 == 1) || (r2 == 1 && c2 == 1) || (c1 == r2)))[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nOut of result!"[/COLOR]);[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]                [COLOR=blue]return[/COLOR];[/FONT]
      [FONT=&quot]            }[/FONT]
      
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine();[/FONT]
      [FONT=&quot]            [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix1.GetUpperBound(0); i++)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix1.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Enter value for first matrix : row {0}, column {1} : "[/COLOR], i, j);[/FONT]
      [FONT=&quot]                    matrix1[i, j] = GetInteger();[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine();[/FONT]
      [FONT=&quot]            [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix2.GetUpperBound(0); i++)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix2.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Enter value for second matrix : row {0}, column {1} : "[/COLOR], i, j);[/FONT]
      [FONT=&quot]                    matrix2[i, j] = GetInteger();[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]            }[/FONT]
      
      [FONT=&quot]            [COLOR=blue]if[/COLOR] (c1 != r2)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]if[/COLOR] (r1 == 1 && c1 == 1)[/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    matrix3 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][r2, c2];[/FONT]
      [FONT=&quot]                    [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix2.GetUpperBound(0); i++)[/FONT]
      [FONT=&quot]                        [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix2.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                            matrix3[i, j] = matrix2[i, j] * matrix1[0, 0];[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]                [COLOR=blue]else[/COLOR][/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    matrix3 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][r1, c1];[/FONT]
      [FONT=&quot]                    [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix1.GetUpperBound(0); i++)[/FONT]
      [FONT=&quot]                        [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix1.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                            matrix3[i, j] = matrix1[i, j] * matrix2[0, 0];[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=blue]else[/COLOR][/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                matrix3 = [COLOR=blue]new[/COLOR] [COLOR=blue]int[/COLOR][r1, c2];[/FONT]
      [FONT=&quot]                [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix1.GetUpperBound(1); i++)[/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix1.GetUpperBound(0); j++)[/FONT]
      [FONT=&quot]                    {[/FONT]
      [FONT=&quot]                        [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] k = 0; k <= matrix2.GetUpperBound(1); k++)[/FONT]
      [FONT=&quot]                            matrix3[j, k] += matrix1[j, i] * matrix2[i, k];[/FONT]
      [FONT=&quot]                    }[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]            }[/FONT]
      
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nResult Matrix\n*************"[/COLOR]);[/FONT]
      [FONT=&quot]            [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i <= matrix3.GetUpperBound(0); i++)[/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] j = 0; j <= matrix3.GetUpperBound(1); j++)[/FONT]
      [FONT=&quot]                {[/FONT]
      [FONT=&quot]                    [COLOR=#2b91af]Console[/COLOR].Write(matrix3[i, j] + [COLOR=#a31515]" "[/COLOR]);[/FONT]
      [FONT=&quot]                }[/FONT]
      [FONT=&quot]                [COLOR=#2b91af]Console[/COLOR].WriteLine();[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]    }[/FONT]
    
    မရှင်းပြတော့ဘူး ကိုယ်တိုင်ပဲ ဖတ်ကြည့်လိုက်နော်။ နားမလည်တဲ့ statement ကို ပြန်မေးပေါ့။
  • edited August 2009 Registered Users
    ကျေးဇူးအစ်ကိုရေ...တစ်ခုလောက်မေးချင်လို့ပါ...
    ညီမစမ်းရေးတဲ့ ပရိုဂရမ်မှာလေ.ညီမလိုချင်တာတစ်ခြား...ဖြစ်နေလို့...
    ကျနော်ကလေ namespace Constuction
    {
    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    private void butCalculate_Click(object sender, EventArgs e)
    {
    int p = Convert.ToInt16(txtP.Text);
    int n = 1;
    do
    {
    n++;
    } while (p % n != 0);
    if (p == n) MessageBox.Show("This is Prime Number");
    else MessageBox.Show("This is not Prime");

    int q = Convert.ToInt16(txtq.Text);
    int d = 1;
    do
    {
    d++;
    } while (q % d!= 0);
    if (q == d) MessageBox.Show("This is Prime Number");
    else MessageBox.Show("This is not Prime");
    int s = p * q;
    int c = 1;
    do{
    c++;
    }while(s%c!=0);
    if (s == c) MessageBox.Show("This is Prime Number");
    else MessageBox.Show("This is not Prime");

    Form3 f1 = new Form3(s);
    f1.Show();

    }

    private void butclear_Click(object sender, EventArgs e)
    {
    txtP.Clear();
    txtq.Clear();

    }
    }
    }
    အစ်ကိုရေ ကျနော်ရချင်တာက..p ရဲ့တန်ဖိုးထည့်လိုက်တာနဲ့...pirme or not prime ပေါ်ချင်တာ အစ်ကိိုု...အဲလိုမဟုတ်ပဲ
    ှq ဆိုလည်းဒီလိုပဲပေါ်ချင်တာ..ဒါပေမဲ့ အဲ့လိုမပေါ်ဘူးဖြစ်နေလို့ အစ်ကို ..ကျနော်ကို အဲ့ဒါလေးပြောပေးပါအုံးနော် ရှင်းပြပေးပါအုံး ...
  • edited August 2009 Registered Users
    ကျနော်ရေးထားတာ from 3ခုရှိတယ် အစ်ကို အဲ့ မှာ form1 ကတော့ ၇ိုးရိုးဒိတိုင်းပေါ်တဲ့ form လေးပဲ ဒုတိယ တစ်ခုကတော့
    p&q တောင်းတဲ့ form အစ််ကို အဲ့မှာ pတောင်းလိုက်တာနဲ့ ဥပမာ ကျနော်က ၃ လို့ ရိုက်ပြိး enter ခေါက်လိုက််တာနဲ့ prime or note prime ပေါ်ချင်တာ အစ်ကို အဲ့ ဒါမလုပ်တတ်တော့လို့...ကူညီပေးပါအုံးအစ်ကို....
  • edited August 2009 Registered Users
    အစ်ကိုရေ ကျနော်ရချင်တာက..p ရဲ့တန်ဖိုးထည့်လိုက်တာနဲ့...pirme or not prime ပေါ်ချင်တာ အစ်ကိိုု...အဲလိုမဟုတ်ပဲ
    ှq ဆိုလည်းဒီလိုပဲပေါ်ချင်တာ..ဒါပေမဲ့ အဲ့လိုမပေါ်ဘူးဖြစ်နေလို့ အစ်ကို ..ကျနော်ကို အဲ့ဒါလေးပြောပေးပါအုံးနော် ရှင်းပြပေးပါအုံး ..
    textbox ထဲမှာ တန်ဖိုးထည့်လိုက်တာနဲ့ prime လား not prime လား စစ်ပြမယ်ဆိုရင် စစ်တဲ့ code ကို textbox ရဲ့ text_change event မှာရေးရမှာ....
    private void txtP_TextChanged(object sender, EventArgs e)
    {
        int p = Convert.ToInt16(txtP.Text);
        int n = 1;
        do
        {
            n++;
        } while (p % n != 0);
        if (p == n) MessageBox.Show("This is Prime Number");
        else MessageBox.Show("This is not Prime");
    }
    
    q အတွက်လည်း တူတူပဲပေါ့။
    **အခုက button_click မှာရေးထားတော့ button ကို နှိပ်မှ အားလုံးစုပြီး ပြနေလိမ့်မယ်။**

    textchange event မှာ ရေးရင် စာလုံးတစ်လုံးရိုက်တာနဲ့ result ပြနေမယ်။ အဲ့လို မဟုတ်ပဲ အားလုံးထည့်ပြီးလို့ enter ခေါက်မှ စစ်ပြချင်ရင်တော့ textbox_keypress event မှာ ရေးရမယ်...
    private void txtP_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == 13)
        {
            int p = Convert.ToInt16(txtP.Text);
            int n = 1;
            do
            {
                n++;
            } while (p % n != 0);
            if (p == n) MessageBox.Show("This is Prime Number");
            else MessageBox.Show("This is not Prime");
        }
    }
    
    ရမယ်ထင်တယ်နော်....
    button_click event မှာတော့ p နဲ့ q မြှောက်လဒ်ကိုပဲ စစ်လိုက်ပေါ့။
    private void butCalculate_Click(object sender, EventArgs e)
    {
        int p = Convert.ToInt16(txtP.Text);
        int q = Convert.ToInt16(txtq.Text);
        int s = p * q;
        int c = 1;
        do
        {
            c++;
        } while (s % c != 0);
    
        if (s == c) MessageBox.Show("This is Prime Number");
        else MessageBox.Show("This is not Prime");
    }
    
  • edited August 2009 Registered Users
    ကျေးဇူးအများကြိးတင်ပါတယ် အစ်ကိုရေ
    အစ်ကိုပြောသလို စမ်းကြည့်လိုက်ပါအုံးမယ်
    ကျေးဇူးအများကြိးတင်ပါတယ်....:103::103::103:
  • edited August 2009 Registered Users
    အစ်ကိုပြောသလို လိုက်စမ်းလိုက်တာ အဆင်ပြေသွားပြိ..နောက်ထပ်မသိတာများ၇ှိရင်လည်း မေးပါအုံးမယ် ခုလိုသေချာလေး၇ှင်းပြေပေးလို့ကျေးဇူးတင်ပါတယ်..
  • edited August 2009 Registered Users
    ကျေးဇူး တင်ပါတယ်အကို ကွှျန်တော် c# ကို လေ့လာနေတာ အကို ရေးတာတွေက တော်တော်ကို အသုံးဝင်ပါတယ် :)
  • edited August 2009 Registered Users
    It's very benefit for me,:D
    Go on. I am waiting next lessons\:D/
  • edited August 2009 Registered Users
    [FONT=&quot]အခုထိ ကျွန်တော်တို့ သုံးခဲ့တဲ့ [/FONT][FONT=&quot]array တွေရဲ့ size ဟာ static size ဖြစ်ပါတယ်။ ကျွန်တော်တို့ array ကို ၃ ခန်းကြေငြာလိုက်ရင် ၃ ခန်းထက်ပိုပြီး တန်ဖိုးထည့်လို့ မရပါဘူး။ ကျွန်တော်တို့ သုံးမယ့် array ရဲ့ size ကို dynamic size အဖြစ်သုံးချင်တယ် ဆိုရင်တော့ သီးခြားအနေနဲ့ collection class တွေကို သုံးကြရမှာပါ။ ပထမဆုံးအနေနဲ့ ArrayList Class အကြောင်း စပြောပါ့မယ်။[/FONT]
    [FONT=&quot]ArrayList Class က array တစ်ခုလိုမျိုး အလုပ်လုပ်ပေးပါတယ်။ သူက variant size ပါ။ စကြေငြာချင်းချင်းမှာ ArrayList ရဲ့ capacity က ၄ ခန်းယူထားပေးပါတယ်။ ကျွန်တော်တို့ တန်ဖိုးထည့်ရင်းနဲ့ ၄ခန်းပြည့်ပြီးလို့ နောက်ထပ်ထပ်ထည့်တာနဲ့ capacity က ၈ခန်းဖြစ်သွားမှာပါ။ ကိုယ်တကယ် တန်ဖိုးထည့်ထားတဲ့ အရေအတွက်ကိုတော့ count ဆိုတဲ့ property ကနေ ပြန်သိနိုင်ပါတယ်။ ArrayList က zero base index ဖြစ်ပြီးတော့ သူ့ရဲ့ index က integer type ပါ။ ArrayList ကလည်း object type လက်ခံတာဖြစ်တဲ့ အတွက် ကျွန်တော်တို့ ကြိုက်တဲ့ type ထည့်ပေးခွင့်ရှိပါတယ်။ example လေးကြည့်ရအောင်။[/FONT]
    [COLOR=blue][FONT=&quot]
    using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
    [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System.Collections;[/FONT]
      
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]arraylistTest[/COLOR][/FONT]
    [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]object[/COLOR][] arr = [COLOR=blue]new[/COLOR] [COLOR=blue]object[/COLOR][3];[/FONT]
      [FONT=&quot]        arr[0] = 1;[/FONT]
      [FONT=&quot]        arr[1] = 2.2;[/FONT]
      [FONT=&quot]        arr[2] = [COLOR=#a31515]"abcdefg"[/COLOR];[/FONT]
      
      [FONT=&quot]        [COLOR=#2b91af]ArrayList[/COLOR] ar = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]ArrayList[/COLOR]();[/FONT]
      [FONT=&quot]        ar.Add(1);[/FONT]
      [FONT=&quot]        ar.Add(9.456);[/FONT]
      [FONT=&quot]        ar.Add([COLOR=#a31515]"ABC"[/COLOR]);[/FONT]
      [FONT=&quot]        ar.Add([COLOR=#a31515]'Z'[/COLOR]);[/FONT]
      [FONT=&quot]        ar.Add([COLOR=blue]new[/COLOR] [COLOR=#2b91af]arraylistTest[/COLOR]());[/FONT]
      
      [FONT=&quot]        [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] i = 0; i < ar.Count; i++)[/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0}\t( {1} )"[/COLOR], ar[i], ar[i].GetType());[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nActual Size of your Array : "[/COLOR] + ar.Count);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Total Capacity of your Array : "[/COLOR] + ar.Capacity);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
    [FONT=&quot]}[/FONT]
    
    *** ArrayList Class ကို သုံးချင်ရင် System.Collection ကို Using လုပ်ပေးရပါမယ်။ ***
  • edited August 2009 Registered Users
    [FONT=&quot]Hashtable class ထဲမှာ key/value တွဲ့ data တွေ လက်ခံပါတယ်။ key/value အတွဲလိုက်ကို [/FONT][FONT=&quot]DictionaryEntry လို့ခေါ်ပါသေးတယ်။ ArrayList မှာ ကျွန်တော်တို့ index ကို integer type သုံးပါတယ်။ Hashtable မှာတော့ index ထောက်ဖို့အတွက် key ကိုသုံးပါတယ်။ သူကလည်း object type ပါ၊ ဒါကြောင့် ကျွန်တော်တို့ ကြို့က်တဲ့ type နဲ့ index ထောက်လို့ ရပါတယ်။ သိမ်းမယ့် data တွေကိုတော့ value အပိုင်းမှာ သိမ်းရပါတယ်။ သူလည်း object type ပါပဲ။ Hashtable ကလည်း ArrayList လိုပဲ size ကို dynamically increment လုပ်လို့ ရပါတယ်။ Example လေးကြည့်ရအောင်။[/FONT]
      [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System.Collections;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]arraylistTest[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Hashtable[/COLOR] ht = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Hashtable[/COLOR]();[/FONT]
      [FONT=&quot]        ht.Add([COLOR=#a31515]"Name"[/COLOR], [COLOR=#a31515]"Sevenlamp"[/COLOR]);[/FONT]
      [FONT=&quot]        ht.Add([COLOR=#a31515]"Address"[/COLOR], [COLOR=#a31515]"Yangon"[/COLOR]);[/FONT]
      [FONT=&quot]        ht.Add([COLOR=#a31515]"Age"[/COLOR], 28);[/FONT]
      
      [FONT=&quot]        [COLOR=blue]foreach[/COLOR] ([COLOR=#2b91af]DictionaryEntry[/COLOR] de [COLOR=blue]in[/COLOR] ht)[/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0}\t\t: \t {1} "[/COLOR], de.Key, de.Value);[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nThere are {0} element/s in your Hashtable Array"[/COLOR], ht.Count);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
  • edited September 2009 Registered Users
    [FONT=&quot]ဒီနေ့ ကျွန်တော် OOP အကြောင်း မစခင် enumeration နဲ့ structure အကြောင်း နည်းနည်း ပြောချင်တယ်ဗျာ။ အရင်ဆုံး variable declaration အကြောင်းကို ပြန်နွှေးရအောင်။ ကျွန်တော်တို့ number တန်ဖိုးတစ်ခု သိမ်းဖို့ integer အမျိုးအစား variable တစ်ခုကြေငြာမယ်ဆိုရင်…[/FONT]
    [FONT=&quot]int num; [/FONT]
    
    [FONT=&quot]ဆိုပြီးကြေငြာပါတယ်။ ဒါဆိုရင် memory ပေါ်မှာ integer value တစ်ခုသိမ်းဖို့ အတွက် နေရာ တစ်နေရာ ယူလိုက်ပါတယ်။ ဟုတ်ပြီ… ဒါဆိုရင် ကျွန်တော်က[/FONT]
    [FONT=&quot]myOwnType  var1;[/FONT]
    
    [FONT=&quot]ဆိုပြီး ကြေငြာလိုက်တယ် ဆိုပါတော့။ ဒါဆိုကျွန်တော်တို့ program ကို compiler က နားလည်ပါဦးမလား။ နားမလည်နိုင်တော့ပါဘူး ဘာလို့လဲဆိုတော့ myOwnType ဆိုတဲ့ pre-defined type မဟုတ်တာတစ်ခုကို ကြေငြာလိုက်လို့ပါ။ ကျွန်တော်တို့ Integer type ကြေငြာတော့ compiler က integer value တွေထည့်ဖို့မှန်းသိပါတယ်။ myOwnType ကိုကြေငြာလိုက်တော့ compiler က ဘာအမျိုးအစားအတွက် ကြေငြာပေးရမှန်းမသိဘူး ဖြစ်သွားပါတယ်။ ဒါဆိုရင် ကျွန်တော်တို့က compiler ကို myOwnType ဆိုတာကတော့ ဘယ်လို data မျိုးတွေကို သိမ်းချင်တာပါဆိုပြီး ပြောပေးလိုက်ရင် မဖြစ်ဘူးလား။ ဖြစ်ပါတယ်။ ဘယ်လိုလုပ်ပေးရမှာလဲ ကျွန်တော်တို့ user defined data type တွေ ကြေငြာပေးရမှာပါ။ ဒီလိုလုပ်ဖို့အတွက် ကျွန်တော်တို့ enumeration တွေ၊ structure တွေ၊ class တွေ အကြောင်းကို သိဖို့လိုလာပါပြီ။[/FONT]
    [FONT=&quot]ကျွန်တော်တို့ enumeration ဆောက်ဖို့အတွက် enum keyword ကိုသုံးရပါတယ်။ ဟုတ်ပြီ အခု ကျွန်တော် myOwnType ကို create လုပ်ပါတော့မယ်။[/FONT]
    [FONT=&quot]enum myOwnType[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]myOwnType ထဲမှာ ကျွန်တော်က နေ့ ၇ နေ့ကို သိမ်းချင်ပါတယ်လို့ defined လုပ်လိုက်ပါတယ်။ ကျွန်တော်က နေ့တွေကို စာသားတွေနဲ့ ရေးလိုက်ပေမယ့် enumeration မှာ တစ်ကယ်သိမ်းသွားမှာက default integer type ပါ။ ကျွန်တော်က integer type အစား တခြား ကိန်းပြည့် number type အဖြစ် ကြေငြာချင်လို့လည်း ရပါတယ်။ default အားဖြင့် 0 ကနေ စပြီး တခုစီကို 1 ပေါင်းပေါင်းပြီးသိမ်းသွားမှာပါ။ ဆိုလိုတာက ရှေ့ဆုံးမှာ ရှိတဲ့ Sunday ရဲ့ value က 0 ဖြစ်ပြီး Monday က 1 ၊ Tuesday က 2 ပါ။ ကျွန်တော်တို့ ကြိုက်တဲ့ number နဲ့လည်း ကိုယ်စားပြုလို့ ရပါတယ်။ ဥပမာ..[/FONT]
    [FONT=&quot]enum myOwnType : byte[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]အိုကေ ဒီပုံစံအတိုင်းဆိုရင် [/FONT]
    [FONT=&quot]Sunday = 0,[/FONT]
    [FONT=&quot]Monday = 5,[/FONT]
    [FONT=&quot]Tuesday = 6,[/FONT]
    [FONT=&quot]Wednesday = 7,[/FONT]
    [FONT=&quot]Thursday = 100,[/FONT]
    [FONT=&quot]Friday = 101,[/FONT]
    [FONT=&quot]Saturday = 102 [/FONT]
    [FONT=&quot]ဆိုပြီး ဖြစ်သွားပါမယ်။[/FONT]
    [FONT=&quot]ကျွန်တော်တို့ enumeration test လုပ်ဖို့ program တစ်ခုလောက် ရေးကြည့်ရအောင်။[/FONT]
    [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]enum[/COLOR] [COLOR=#2b91af]myOwnType[/COLOR] : [COLOR=blue]byte[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday[/FONT]
      [FONT=&quot]    }[/FONT]
      
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]myOwnType[/COLOR] wd = [COLOR=#2b91af]myOwnType[/COLOR].Friday;[/FONT]
      [FONT=&quot]        [COLOR=blue]int[/COLOR] i = 7;[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0} is {1}"[/COLOR], wd, ([COLOR=blue]int[/COLOR])wd);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0} is {1}"[/COLOR], i, ([COLOR=#2b91af]myOwnType[/COLOR])i);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].ReadLine();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Output[/FONT]
    Friday is 101
      [FONT=&quot]7 is Wednesday[/FONT]
    
  • edited September 2009 Registered Users
    [FONT=&quot]Enumeration ကိုသုံးခြင်းအားဖြင့် ကျွန်တော်တို့ ကိုယ်ပိုင်data type တွေဆောက်ပြီး သုံးလို့ရလာပါမယ်။ enumeration သုံးတာ ဘာပိုကောင်းလာလဲ အတိအကျတော့ မသိဘူးဗျ။ ကျွန်တော်စိတ်ထင်တော့ enumeration သုံးလိုက်ခြင်းအားဖြင့် ၁။ memory ပေါ်မှာ နေရာယူတဲ့ size သေးသွားမယ်၊ ၂။ project တစ်ခုကို develop လုပ်တဲ့ programmer တွေ ကြားထဲမှာ standardized ဖြစ်သွားမယ် ( ဥပမာ.. developer တစ်ယောက်က Sunday လို့ပေါင်းရင်ပေါင်းမယ်၊ နောက်တစ်ယောက်က SUNDAY လို့ပေါင်းမယ်၊ တခြားတစ်ယောက်က sun လို့ပဲ ပေါင်းရင်ပေါင်းမယ်၊ enum defined လုပ်လိုက်ခြင်းအားဖြင့် ဒါမျိုးကိစ္စတွေ မရှိနိုင်တော့ဘူး ပေါ့ )။[/FONT]
    [FONT=&quot]Enumeration သုံးရင် ကျွန်တော်တို့က data type တစ်မျိုးထဲပဲ သုံးလို့ရတယ်။ integer ဆို integer, byte ဆို byte ပေါ့၊ record တစ်ခုပုံစံမျိုး data type အစုံသိမ်းချင်ရင်တော့ enum အစား structure ဆောက်ပြီးသုံးကြပါတယ်။ (ဆိုင်မဆိုင်တော့ မသိဘူး တွဲပြီးပြောလိုက်တာ :P) ဥပမာ.. ကျွန်တော်က ကျောင်းသားတစ်ယောက်ရဲ့ data တွေသိမ်းချင်တယ်ဆိုရင် သိမ်းမယ့် data တွေထဲမှာ roll (int), name (string), mark (int) စတာတွေ ပါမယ်ဗျာ။ ဒါဆိုရင် enum သုံးလို့ မရတော့ဘူး၊ structure ဒါမှမဟုတ် class ကိုသုံးရတော့မယ်။ structure နဲ့ class က အဓိက value type နဲ့ reference type ပဲကွာသွားတာ။ ကျန်တာအားလုံး အတူတူနီးပါးပဲ။ example program လေးကြည့်ရအောင်။[/FONT]
    
      [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]struct[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Student[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] roll;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]string[/COLOR] name;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] mark;[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]structuretest[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Student[/COLOR] s1;[/FONT]
      [FONT=&quot]        s1.roll = 1; s1.name = [COLOR=#a31515]"Ag Ag"[/COLOR]; s1.mark = 90;[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Student[/COLOR] s2 = s1;[/FONT]
      [FONT=&quot]        s2.roll = 2; s2.name = [COLOR=#a31515]"Mg Mg"[/COLOR];[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Student[/COLOR] s3 = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Student[/COLOR]();[/FONT]
      [FONT=&quot]        s3.roll = 3; s3.name = [COLOR=#a31515]"Zw Zw"[/COLOR]; s3.mark = 80;[/FONT]
      
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nRoll : {0} \nName : {1} \nMark : {2}"[/COLOR], s1.roll, s1.name, s1.mark);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nRoll : {0} \nName : {1} \nMark : {2}"[/COLOR], s2.roll, s2.name, s2.mark);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"\nRoll : {0} \nName : {1} \nMark : {2}"[/COLOR], s3.roll, s3.name, s3.mark);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ပြန်ရှင်းရအောင်[/FONT]
    
      [COLOR=blue][FONT=&quot]struct[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Student[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] roll;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]string[/COLOR] name;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] mark;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒါက Student ဆိုတဲ့ user defined type တစ်ခု create လုပ်တာပါ။ ဒီလိုရေးလိုက်ခြင်းအားဖြင့် compiler က Student ဆိုတာမှာတော့ integer အမျိုးအစား variable နှစ်ခုရယ်၊ string တစ်ခုရယ် ပါတယ်ဆိုတာ သိသွားပါပြီ။ variable တွေရဲ့ရှေ့မှာ public လို့ရေးတာကတော့ အဲ့ဒီ variable တွေကို structure ရဲ့ အပြင်ဘက် တခြားနေရာကနေ ခေါ်သုံးခွင့်ပြုတာပါ။ [/FONT]
    [FONT=&quot]ပြီးတော့ Main function ထဲမှာ ကျွန်တော်က ကျောင်းသား ၃ယောက်ရဲ့ data သိမ်းချင်တယ် ဆိုတော့ Student variable ၃ ခုကြေငြာရမှာပေါ့။ ဒါကြောင့် ကျွန်တော်က s1, s2 နဲ့ s3 ဆိုပြီး ကြေငြာလို်က်ပါတယ်။[/FONT]
      [COLOR=#2b91af][FONT=&quot]Student[/FONT][/COLOR][FONT=&quot] s1;[/FONT]
    
    [FONT=&quot]ဆိုပြီး ကြေငြာလိုက်တာနဲ့ ကျွန်တော်တို့ စက်ရဲ့ memory ပေါ်မှာ Student အမျိုးအစား data တွေသိမ်းလို့ရမယ့် နေရာတစ်ခု ဆောက်ပေးသွားပါတယ်။ အဲ့ဒီ နေရာထဲမှာ roll, name, mark တို့ သိမ်းဖို့နေရာပါ ပါပြီးသားပါ။[/FONT]
    [FONT=&quot]s1.roll = 1; s1.name = [COLOR=#a31515]"Ag Ag"[/COLOR]; s1.mark = 90;[/FONT]
    
    [FONT=&quot]ပြီးတော့မှ ကျွန်တော်က အဲ့ဒီထဲကို 1, “Mg Mg”, 90 တို့ကို ထည့်လိုက်ပါတယ်။ Student အမျိုးအစား s1 ထဲမှာ ရှိတဲ့ variable တွေကို ပြန်ခေါ်ချင်တာဖြစ်လို့ s1(dot)variable name ဆိုပြီး ရေးရပါတယ်။[/FONT]
    [COLOR=#2b91af][FONT=&quot]Student[/FONT][/COLOR][FONT=&quot] s2 = s1;[/FONT]
    
    [FONT=&quot]နောက်ထပ် s2 ကို ကြေငြာတဲ့နေရာမှာတော့ s1 ထဲက တန်ဖိုးတွေကိုပါ s2 ထဲကို ထည့်လိုက်ပါတယ်။ ဒါဆိုရင် s2 ထဲမှာ ရှိတဲ့ roll, name နဲ့ mark မှာ s1 ထဲက တန်ဖိုးတွေ ရောက်ပြီးသားဖြစ်သွားပါတယ်။ [/FONT]
    [FONT=&quot]s2.roll = 2; s2.name = [COLOR=#a31515]"Mg Mg"[/COLOR];[/FONT]
    
    [FONT=&quot]ပြီးတော့မှ s2 ရဲ့ roll နဲ့ name ကို ပြန်ပြင်လိုက်ပါတယ်။ အမှတ်ကိုတော့ မပြင်လိုက်ပါဘူး။ ဒီလိုပြင်လိုက်ခြင်းအားဖြင့် နဂိုတန်ဖိုးဖြစ်တဲ့ s1 ထဲမှာ ပြောင်းသွားမလား? Structure က value type ဖြစ်လို့ s1 ထဲမှာ လိုက်ပြီး ပြောင်းသွားမှာ မဟုတ်ပါဘူး။[/FONT]
    [COLOR=#2b91af][FONT=&quot]Student[/FONT][/COLOR][FONT=&quot] s3 = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Student[/COLOR]();[/FONT]
      [FONT=&quot]s3.roll = 3; s3.name = [COLOR=#a31515]"Zw Zw"[/COLOR]; s3.mark = 80;[/FONT]
    
    [FONT=&quot]s3 ထပ်ကြေငြာတယ်၊ တန်ဖိုးထည့်ပါတယ်။ ဒီနေရာမှာ s3 ကို new Student() ဆိုပြီး object ဆောက်ပေးထားတာ တွေ့မှာပါ။ ကျွန်တော်တို့ structure ကို object ဆောက်ပြီးတော့ ဖြစ်ဖြစ် မဆောက်ပဲနဲ့ ဖြစ်ဖြစ် ကြိုက်သလိုသုံးလို့ရပါတယ်။ object ဆောက်ပေးရင် structure ထဲက variable တွေကို default value assign လုပ်ပေးသွားမှာဖြစ်ပြီးတော့၊ object မဆောက်ပဲသုံးရင်တော့ default value assign မလုပ်ပေးပါဘူး။ ဒါဆို default value ကဘာတွေလဲ? ဟုတ်ကဲ့ number တွေဆို default value က 0 ပါ။ string အတွက်ကတော့ null ပေါ့။[/FONT]
    [FONT=&quot]ဒီ program လေးကို ရိုက်ပြီး run ကြည့်လိုက်ပါဦး။[/FONT]
  • edited September 2009 Registered Users
    အားပေးနေပါတယ်။
    ကျွနု်ပ်ရှိစေချင်တာ အဲဒီလိုမျိုးပေးမယ့်လူကိုပါ။
    (ကျွနု်ပ်ကတော့ မပေးနိုင်သေးလို့ သူများတွေပေးတာကို ၀မ်းသာနေတာပါ။:))
    အခုတော့ မဖတ်နိုင်သေးပါဘူးဗျာ။
    စာမေးပွဲပြီးရင်တော့ ဖတ်နိုင်ကောင်းရဲ့လို့ထင်တာပဲ။
    တခြားသော language တွေမှာလဲ အဲဒါမျိုးရှိရင်သိပ်ကောင်းမှာပဲ။
    တစ်နေ့တော့ဖြစ်လာမှာပါ။ (သီချင်းမဟုတ်ပါ။)
    ကျေးဇူးတင်စွာဖြင့်....:103:
  • edited September 2009 Registered Users
    [FONT=&quot]ကျွန်တော်တို့ မနေ့က ရေးခဲ့တဲ့ structure test program လေးနဲ့ပဲ ဆက်ပြီး ပြောရအောင်ဗျာ။ structure ကိုသုံးခြင်းအားဖြင့် ကျွန်တော်တို့ record တွေသိမ်းလို့ ရတယ်ဆိုတာ သိခဲ့ပါပြီ။ structure ဟာ object-oriented programming မှာ အခြေခံအကျဆုံး အပိုင်းဖြစ်တဲ့ class တွေဖြစ်ပေါ်လာဖို့ ကနဦး အစပါပဲ။ structure က value type ပါ။ ဒါကြောင့် OOမှာ သုံးလို့ အဆင်မပြေပါဘူး။ ဒီအခါမှာ structure ပုံစံအတိုင်း reference type အနေနဲ့ သုံးနိုင်မယ့် class ကို နောက်ပိုင်းမှာ အသုံးတွင်ကျယ်လာပါတယ်။ OOP မှာ အဓိကအကျဆုံးကတော့ class တွေပါပဲ။ ဟုတ်ပြီ၊ class တစ်ခုမှာ အခြေခံအားဖြင့်တော့ data member တွေနဲ့ member function တွေပါလေ့ရှိပါတယ်။ member data တွေဟာ သက်ဆိုင်ရာ classရဲ့ ၀ိသေသ လက္ခဏာတွေကို ကိုယ့်စားပြုပြီးတော့၊ member function တွေကတော့ အဲ့ဒီ classရဲ့ လုပ်ဆောင်ချက်တွေပါ။ ဥပမာအားဖြင့် People ဆိုတဲ့ class တစ်ခုမှာ အမည်(name)၊ အသက်(age) စသည်တို့ဟာ member data တွေ ဖြစ်ကြပြီး၊ စားသည်(eat())၊ အိပ်သည်(sleep()) စသည်တို့ကတော့ member function တွေ ဖြစ်ကြမှာပါ။[/FONT]
    [FONT=&quot]class People[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          string name;            // member data[/FONT]
      [FONT=&quot]          int age;                   // member data[/FONT]
      [FONT=&quot]          void  eat()               // member function[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   // eat something…[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]          void sleep()             // member function[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   // sleep at night.[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]အခုကျွန်တော် ရေးလိုက်တဲ့ People class ကို datatype class လို့ ခေါ်ပါတယ်။ မနေ့က program လေးကို class အနေနဲ့ ပြန်ပြီး ရေးကြည့်ရအောင်။ [/FONT]
        [FONT=&quot]class Student[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          public int roll;[/FONT]
      [FONT=&quot]          public string name;[/FONT]
      [FONT=&quot]          public int mark;[/FONT]
      [FONT=&quot]          public void Display()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,[/FONT]
      [FONT=&quot]                             roll, name, mark);[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
      [FONT=&quot]class StudentTest[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          static void Main()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Student s1 = new Student();[/FONT]
      [FONT=&quot]                   s1.roll = 1; s1.name = “Ag Ag”; s1.mark = 90;[/FONT]
      [FONT=&quot]                   Student s2 = new Student();[/FONT]
      [FONT=&quot]                   s2.roll = 2; s2.name = “Zw Zw”; s2.mark = 88;[/FONT]
      [FONT=&quot]                   Student s3 = s2;[/FONT]
      [FONT=&quot]                   s3.roll = 3; s3.name = “Ma Ma”;[/FONT]
      [FONT=&quot]                   // display [/FONT]
      [FONT=&quot]                   s1.Display();[/FONT]
      [FONT=&quot]                   s2.Display();[/FONT]
      [FONT=&quot]                   s3.Display();[/FONT]
      [FONT=&quot]                   Console.Read();[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Output:[/FONT]
    [B][I][FONT=&quot]1       [/FONT][/I][/B][I][B][FONT=&quot]Ag Ag[/FONT][/B][/I][B][I][FONT=&quot]                90[/FONT][/I][/B]
      [B][I][FONT=&quot]3       Ma Ma                88[/FONT][/I][/B]
      [B][I][FONT=&quot]3       Ma Ma                88[/FONT][/I][/B]
    
    [FONT=&quot]ဒီ program လေးကို အသေးစိတ်ပြန်ရှင်းပြပါ့မယ်။ ပထမဆုံး data type class (Student) လေး ဆောက်ပါတယ်။ member data အနေနဲ့ roll၊ name နဲ့ mark တို့ပါပြီး။ student information တွေ ပြန်ထုတ်ပြပေးဖို့ Display ဆိုတဲ့ member function တစ်ခုပါပါတယ်။ student class ထဲက member တွေ အားလုံးရဲ့ ရှေ့မှာ public ဆိုတဲ့ keyword လေးရေးထားတာ တွေ့မှာပါ၊ class တစ်ခုအတွင်းမှာ member တွေ ကြေငြာရင် default က private ပါ။ ဆိုလိုတာကတော့ သက်ဆိုင်ရာ class အတွင်းမှာပဲ သုံးခွင့်ရှိပြီး အပြင်(တခြား class တွေ) ကနေ ခေါ်သုံးလို့ မရဘူးဆိုတဲ့ အဓိပ္ပါယ်ပါ။ အခုကျွန်တော်က public လုပ်ပေးလိုက်တဲ့ အတွက် ကြိုက်တဲ့ နေရာကနေ ခေါ်သုံးခွင့်ရှိသွားပါတယ်။ ဟုတ်ပြီ။ အခုကျွန်တော်တို့ program လေးကို run ဖို့ အတွက် Main function ပါတဲ့ run class တစ်ခု ထပ်ဆောက်ပါတယ်။ Main function အတွင်းမှာ ပထမဆုံး ကျောင်းသားတစ်ယောက်ရဲ့ information သိမ်းဖို့အတွက် Student အမျိုးအစား variable a ကို ကြေငြာပြီး object ဆောက်ပေးပါတယ်။ class တွေဟာ reference data type ဖြစ်တဲ့ အတွက် variable ကြေငြာရုံနဲ့ တန်ဖိုးသိမ်းလို့ မရသေးပါဘူး။ ဒါကြောင့် တန်ဖိုးတကယ် သိမ်းနိုင်ဖို့အတွက် object ဆောက်ပေးရပါတယ်။ ရှုပ်သွားပြီထင်တယ် :D[/FONT]
    [FONT=&quot]ကျွန်တော်တို့ memory မှာ stack အပိုင်းနဲ့ heap အပိုင်း ဆိုပြီး အပိုင်း၂ပိုင်းရှိတယ်ဗျ။ value type variable တွေကို stack အပိုင်းမှာပဲ သိမ်းလေ့ရှိတယ်။ ဒါကြောင့် မနေ့က သိမ်းခဲ့တဲ့ Student အမျိုးအစား s1, s2, s3 တို့က structure (value type) ဖြစ်တဲ့အတွက် stack အပိုင်းမှာ နေရာယူသွားပါတယ်။ အဲ့ဒီနေရာမှာပဲ တန်ဖိုးကို တကယ်သိမ်းပါတယ်။ class ကတော့ မတူပါဘူး။ သူက stack ရယ် heat ရယ် ခွဲပြီးနေရာယူပါတယ်။ object reference(variable) ကို stack မှာ သိမ်းပြီး၊ real object ကိုတော့ heat မှာ သိမ်းပါတယ်။ structure နဲ့ class တို့ memory ပေါ်မှာ နေရာယူပုံကို ပုံလေး ဆွဲပြပေးထားပါတယ်၊ ပုံကြည့်လိုက်ရင် နည်းနည်းနားလည်သွားမယ် ထင်ပါတယ်။[/FONT]
    pic1_17.PNG
    [FONT=&quot]Structure မှာ သိမ်းသွားတဲ့ ပုံကတော့ ရှင်းပါတယ် ကျွန်တော်တို့ class မှာ သိမ်းသွားတဲ့ ပုံကိုပဲ ကြည့်ရအောင်။ ကျွန်တော်ပြောခဲ့သလိုပဲ class ကို variable ကြေငြာလိုက်လို့ ရလာတဲ့ နေရာမှာ value တွေသိမ်းလို့မရပါဘူး၊ reference တွေပဲ သိမ်းလို့ ရပါတယ်။ value တကယ်သိမ်းနိုင်ဖို့အတွက်တော့ ကျွန်တော်တို့က new operator သုံးပြီး object ဆောက်ပေးရပါတယ်။ အဲ့ဒီလို new နဲ့ ဆောက်လိုက်တဲ့ object တွေဟာ heap memoryထဲမှာ နေရာသွားယူပါတယ်။ ဒါကြောင့် Student s3 က object မဆောက်ထားပါဘူး၊ class variable ပဲ ကြေငြာထားပါတယ်။ ဒါကြောင့် s3 အတွက် ကိုယ်ပိုင် object မရှိပါဘူး။ s3 ထဲကို s2 ကိုထည့်လိုက်ပါတယ်။ ဒီနေရာမှာ s2 ထဲမှာ ဘာရှိလဲ ကျွန်တော်တို့ ပြန်ကြည့်တော့ s2 ကြေငြာထားတဲ့ နေရာမှာ memory address (f002) ပဲ ရှိပါတယ်။ ဒါကြောင့် s3 ထဲကိုလည်း f002 ပဲ ရောက်သွားမှာပါ။ ဒါဆို s3 ကလည်း memory address f002 ရှိနေတဲ့ နေရာက object ကိုပဲ သွားပြီး point လုပ်ပါတယ်။ ဒါကြောင့် s2 နဲ့ s3 ၂ ခုလုံးက object တစ်ခုထဲကိုပဲ point ထားကြပါတယ်။ ဒါကြောင့် s3 ထဲကိုထည့်လိုက်တဲ့ roll 3 နဲ့ name “Ma Ma” ဟာ s2 ကို ရိုက်ထုတ်တဲ့ နေရာမှာပါ ပေါ်လာရခြင်းဖြစ်ပါတယ်။ တော်တော်လေးတော့ ရှုပ်သွားမယ်ထင်တယ်။ ကျွန်တော် စာအရေးအသား ညံ့တော့ သေသေချာချာ နားလည်အောင် မရှင်းပြနိုင်လို့ပါ။[/FONT]
  • edited September 2009 Registered Users
    first
    i'll print
    second
    i'll read ur posts
    thanks bro
    c# is not strange for me
    but i'm still at beginner stage
    ur posts may help me a lot
  • edited September 2009 Registered Users
    acidRain wrote: »
    first
    i'll print
    second
    i'll read ur posts
    thanks bro
    c# is not strange for me
    but i'm still at beginner stage
    ur posts may help me a lot

    အခုကျွန်တော်ရေးထားတာတွေကလည်း beginner level အတွက် basic တွေဗျ။ တစုံတခု အထောက်အကူ ဖြစ်တယ်ဆိုရင်လည်း ၀မ်းသာပါတယ်။
  • edited September 2009 Registered Users
    အစ်ကိုရေ ကျေးဇူးတင်ပါတယ်
  • edited September 2009 Registered Users
    ဒီနေ့ ကျွန်တော်တို့ Constructor အကြောင်း ပြောရအောင်။ ကျွန်တော်တို့ student ကို object ဆောက်တုန်းကရေးခဲ့တဲ့ code လေးကို ပြန်ကြည့်ရအောင်။
    [FONT=&quot]Student s1 = new Student();[/FONT]
    
    [FONT=&quot]ကျွန်တော်တို့ class တွေကို object ဆောက်ဖို့ အတွက် new operator ကိုသုံးပြီး function တစ်ခုကို ခေါ်ရပါတယ်။ အဲ့ဒီ function name က class name နဲ့ တူပါတယ်။ အဲ့ဒီ function ကို constructor function လို့ ခေါ်ပါတယ်။ ကျွန်တော်တို့ ှStudent class ဆောက်တုန်းက constructor function ဆောက်ခဲ့လား။ မဆောက်ပေးခဲ့ပါဘူး။ ကျွန်တော်တို့မဆောက်ပေးခဲ့ပဲ ဘယ်လိုဖြစ်လို့ ခေါ်သုံးလို့ ရနေပါလိမ့်။ ဟုတ်ကဲ့ ကျွန်တော်တို့ class တစ်ခု ဆောက်လိုက်ပြီဆိုတာနဲ့ compiler က အဲ့ဒီ class ထဲမှာ constructor function ပါလားစစ်ပါတယ်၊ မပါဘူး ဆိုရင် default constructor function တစ်ခုကို compiler က အလိုအလျှောက် ဆောက်ပေးပါတယ်။ ဒီလိုဆောက်ပေးသွားလိုသာ ကျွန်တော်တို့ class တွေကို object ဆောက်လို့ ရတာဗျ။ အိုကေ compiler ကဆောက်ပေးတဲ့ default constructor က ဘာတွေလုပ်ပေးလဲ ဆိုတော့ class ထဲမှာ ရှိတဲ့ member data တွေကို default value assign လုပ်ပေးပါတယ်။ default value ဆိုတာဘာလဲ ပြောပြီးပြီထင်တယ်နော်။ တခါတလေ default constructor က လုပ်ပေးတဲ့ အလုပ်တွေကို ကျွန်တော်က မကြိုက်ဘူး ဆိုရင် ကျွန်တော်တို့ လိုချင်တဲ့ ပုံစံရအောင် ကိုယ်တိုင် constructor တွေ ဆောက်ပေးဖို့ လိုပါတယ်။ ဟုတ်ပြီ ဒါဆိုရင် constructor တွေဘယ်လို အလုပ်လုပ်လဲ၊ constructor ဘယ်နှစ်မျိုးရှိလဲ၊ ကိုယ်ပိုင် constructor တွေ ဘယ်လိုဆောက်လဲ လေ့လာလိုက်ရအောင်။[/FONT]
    [FONT=&quot]Instant Constructor, Private Constructor နဲ့ Static Constructor ဆိုပြီး Constructor အမျိုးအစား ၃ မျိုးရှိပါတယ်။ လူသိအများဆုံးနဲ့ အသုံးလည်း အများဆုံး မဖြစ်မနေသုံးနေရတဲ့ constructor အမျိုးအစားကတော့ instant constructor ဖြစ်ပါတယ်။ instant constructor ဆိုတာကတော့ ကျွန်တော်တို့ class တွေကို object ဆောက်ဖို့အတွက် new operator နဲ့ တွဲပြီး ခေါ်နေရတဲ့ constructor ပဲ ဖြစ်ပါတယ်။ instant constructor မှာ ၂ မျိုးထပ်ခွဲနိုင်ပါတယ်။ Default Constructor နဲ့ [/FONT][FONT=&quot]parameterized constructors[/FONT] [FONT=&quot]ဆိုပြီး ဖြစ်ပါတယ်။ Default constructor ကို compiler က auto ဆောက်ပေးတယ်ဆိုတာ အပေါ်မှာ ကျွန်တော်ပြောခဲ့ပြီးပါပြီ။ ဒါပေမယ့် တစ်ခု သိထားရမှာက compiler က ကျွန်တော်တို့ class ထဲမှာ constructor လုံး၀ မပါဘူး ဆိုမှ default constructor ကို ဆောက်ပေးတာပါ။ ကျွန်တော်တို့ class ထဲမှာ constructor တစ်ခု ပါပြီဆိုတာနဲ့ default constructor ဆောက်တဲ့ အလုပ်ကို compiler က မလုပ်ပေးတော့ပါဘူး။ instant constructor တစ်ခုဆောက်ဖို့အတွက် လိုက်နာရမယ့် စည်းကမ်းတွေကတော့ constructor ရဲ့ ရှေ့မှာ public keyword ပါရပါမယ်၊ class name နဲ့ နာမည်တူရပါမယ်၊ return type မထည့်ပေးရပါဘူး။ ကဲ ဟိုနေ့က ရေးခဲ့တဲ့ student class လေးမှာပဲ စမ်းကြည့်ရအောင်ဗျာ။ ကျွန်တော်က roll, name နဲ့ mark တို့ကို ကိုယ့် စိတ်ကြိုက် default value ထည့်ပေးဖို့ ကိုယ်ပိုင် default constructor လေး ဆောက်ပါမယ်။[/FONT]
    [FONT=&quot]class Student[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          public int roll;[/FONT]
      [FONT=&quot]          public string name;[/FONT]
      [FONT=&quot]          public int mark;[/FONT]
      [FONT=&quot]          public Student() // default constructor[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   roll = -1;[/FONT]
      [FONT=&quot]                   name = “?”;[/FONT]
      [FONT=&quot]                   mark = 0;[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]          public void Display()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,[/FONT]
      [FONT=&quot]                             roll, name, mark);[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
      [FONT=&quot]class StudentTest[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          static void Main()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Student s1 = new Student();[/FONT]
      [FONT=&quot]                   s1.Display();[/FONT]
      [FONT=&quot]                   Console.Read();[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]အိုကေ ဒီ program လေးကို run ကြည့်ရင် constructor ထဲမှာ ကျွန်တော်တို့ ထည့်ပေးထားတဲ့ အတိုင်း Roll = 1, Name = “?” နဲ့ Mark = 0 ဆိုပြီး ပေါ်လာမှာပါ။ constructor ကို မထည့်ပဲ run ကြည့်ရင်တော့ Roll = 0, Name = “” နဲ့ Mark = 0 ဖြစ်နေပါလိမ့်မယ်။ ဒါက default constructor အလုပ်လုပ်ပုံပါ။ အခု [/FONT][FONT=&quot]parameterized [/FONT][FONT=&quot]constructor အကြောင်းဆက်ကြည့်ရအောင်။ ကျွန်တော်က student class ကို object ဆောက်တဲ့ constructor function လေးထဲကို student ရဲ့ name လေးကို parameter အနေနဲ့ ထည့်ပေးချင်တယ် ဆိုရင် အခုကျွန်တော်တို့ ဆောက်ထားတဲ့ default constructor ကို သုံးလို့ မရတော့ပါဘူး။ ဒါဆို string တစ်ခု လက်ခံမယ့် constructor တခုထပ်ရေးပေးဖို့ လိုအပ်လာပါပြီ။ အခုလို ရေးလိုက်ပါမယ်။ [/FONT]
    [FONT=&quot]class Student[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          public int roll;[/FONT]
      [FONT=&quot]          public string name;[/FONT]
      [FONT=&quot]          public int mark;[/FONT]
      [FONT=&quot]          public Student(string name)[/FONT]  [FONT=&quot]// parameterized constructor[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   roll = -1;[/FONT]
      [FONT=&quot]                   this.name = name;[/FONT]  [FONT=&quot]// assign local to member[/FONT]
      [FONT=&quot]                   mark = 0;[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]          public void Display()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,[/FONT]
      [FONT=&quot]                             roll, name, mark);[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
      [FONT=&quot]class StudentTest[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]          static void Main()[/FONT]
      [FONT=&quot]          {[/FONT]
      [FONT=&quot]                   Student s1 = new Student(“Mg Mg”);[/FONT]
      [FONT=&quot]                   s1.Display();[/FONT]
      [FONT=&quot]                   Console.Read();[/FONT]
      [FONT=&quot]          }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒီ program လေးကို run ရင် Roll = -1, Name = “Mg Mg” နဲ့ Mark = 0 ဆိုပြီး ပြပါလိမ့်မယ်။ ဒီ program မှာ ကျွန်တော်က default constructor အစား [/FONT][FONT=&quot]parameterized constructor[/FONT] [FONT=&quot]ကိုထည့်လိုက်ပါတယ်။ ဒါဆိုရင် compiler က default constructor ဆောက်ပေးမှာလား ? မဆောက်ပေးဘူးနော်။ ဒါကြောင့် ကျွန်တော်က Main function ထဲမှာ ဒီလို သွားရေးရင် error တက်ပါလိမ့်မယ်။[/FONT]
    [FONT=&quot]Student s2 = new Student(); // error code[/FONT]
    [FONT=&quot]ဘာလို့လဲ ဆိုတော့ default constructor မပါလို့ပါ။ အခုရေးလိုက်တဲ့ constructor ထဲမှာ this.name = name; ဆိုပြီး ရေးလိုက်တာကို တွေ့မှာပါ၊ အဲ့ဒါလေး ပြန်ရှင်းပါဦးမယ်။ Student class ထဲမှာ ကျွန်တော်က name ဆိုတဲ့ variable လေးကို ကြေငြာထားပြီးသားပါ။ အဲ့ဒါကို member variable လို့ ခေါ်ကြောင်းလည်း သိပြီးသားပါ။ ဒီလိုပါပဲ ကျွန်တော် အခု ဆောက်လိုက်တဲ့ constructor ထဲမှာ လဲ parameter variable name ကို ထပ်ကြေငြာလိုက်ပါတယ်။ အဲ့ဒါကိုတော့ local variable လို့ ခေါ်ပါတယ်။ ကဲ အခု member နဲ့ local နာမည်တူနေပါပြီ။ ဒါဆို အနေအထားမျိုးမှာ ကျွန်တော်က name လို့ ခေါ်လိုက်ရင် အနီးဆုံး local variable ကိုပဲ compiler က ယူသုံးသွားပါတယ်။ ဒါကြောင့် ကျွန်တော်က member variable name ကို ခေါ်ဖို့အတွက် this ဆိုတဲ့ keyword နဲ့ တွဲပြီး ခေါ်ပေးရပါတယ်။ instant constructor အကြောင်း နားလည်ပြီလားတော့ မသိဘူး။ နားမလည်ဘူးဆိုရင်လည်း ပြောကြဦးဗျာ။ ထပ်ပြီး ပြန်ရှင်းပေးပါ့မယ်။
    [/FONT]
    [FONT=&quot]
    [/FONT]
    [FONT=&quot]နောက်နေ့မှ Private နဲ့ Static constructor တွေ အကြောင်းဆက်ရအောင်ဗျာ။[/FONT]
  • edited September 2009 Registered Users
    [FONT=&quot]ဟိုနေ့က ကျွန်တော်တို့ Instant constructor အကြောင်းသိခဲ့ပြီးပြီ။ Constructor လို့ဆိုလိုက်တာနဲ့ programmer တော်တော်များများ ပြေးမြင်မီကြတာလည်း ဒီ Instant Constructor ပါပဲ။ အသုံးအများဆုံးနဲ့ မသုံးမဖြစ် Constructor လည်းဖြစ်ပါတယ်။ Instant Constructor အပြင် တခြား လူသိနည်းတဲ့ constructor ၂ ခုရှိပါသေးတယ်။ အဲ့ဒါတွေကတော့ Private Constructor နဲ့ Static Constructor တို့ပါပဲ။ Instant Constructor ကို public constructor လိုလဲ ခေါ်ပါသေးတယ်။ constructor ရဲ့ ရှေ့မှာ public keyword ကိုရေးပေးရပါတယ်။ ဘာလို့လဲ ဆိုတော့ class ကို object ဆောက်ဖို့အတွက် တခြား class တွေ ထဲမှာ ခေါ်သုံးလို့ ရအောင်ပါ။ private လို့ရေးလိုက်လို့ရှိရင်တော့ အဲ့ဒီ private constructor ပါတဲ့ class ကို object ဆောက်လို့ မရတော့ပါဘူး။ ဒါကြောင့် object မဆောက်စေချင်တဲ့ class တွေမှာ private constructor ကိုရေးပေးလေ့ရှိပါတယ်။ ဥပမာ…[/FONT]
    [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Constant[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]private[/COLOR] Constant() [/FONT]
      [FONT=&quot]    {}[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]static[/COLOR] [COLOR=blue]string[/COLOR] DeveloperName = [COLOR=#a31515]"Sevenlamp"[/COLOR];[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [COLOR=green][FONT=&quot]    //Constant c = new Constant(); // error[/FONT][/COLOR]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#2b91af]Constant[/COLOR].DeveloperName);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒီ program လေးမှာ private constructor ကြေငြာထားလို့ Constant class ကို object ဆောက်လို့ မရပါဘူး။ ဒါဆိုရင် အဲ့ဒီ class ထဲမှာ ရှိတဲ့ member data တွေကို ဘယ်လို ပြန်ခေါ်သုံးမလဲ။ ဟုတ်ကဲ့ ကျွန်တော်တို့ private constructor ရှိတဲ့ class တွေထဲက member တွေကို ပြန်သုံးလို့ ရအောင် အဲ့ဒီ member တွေကို static keyword နဲ့ တွဲ့ပြီး ကြေငြာပေးရပါမယ်။ ဟုတ်ပြီ အဲ့ဒီ variable တွေကို static variable တနည်းအားဖြင့် class variable လို့ခေါ်ပါတယ်။ အဲ့ဒီ class variable တွေကို ခေါ်ဖို့အတွက် သူရှိနေတဲ့ class ကို object ဆောက်စရာ မလိုပါဘူး။ program မှာ ခေါ်ထားသလို class name ကနေတဆင့် ခေါ်သုံးလို့ ရပါတယ်။ နောက် constructor တစ်မျိုးကတော့ static constructor ပါ။ class တစ်ခုအတွင်းမှာ ရှိတဲ့ static member တွေအလုပ်မလုပ်ခင် အရင်ဆုံး static constructor က အလုပ်လုပ်လေ့ရှိပါတယ်။ ခုန program လေးကိုပဲ static constructor လေးထည့်ပြီး ပြန် run ကြည့်ရအောင်။[/FONT]
    [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Constant[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]private[/COLOR] Constant() [/FONT]
      [FONT=&quot]    {}[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] Constant()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"print from static constructor"[/COLOR]); [/FONT]
      [FONT=&quot]        DeveloperName = [COLOR=#a31515]"Sevenlamp"[/COLOR];     [/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]static[/COLOR] [COLOR=blue]string[/COLOR] DeveloperName;[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#2b91af]Constant[/COLOR].DeveloperName);[/FONT]
      [COLOR=#2b91af][FONT=&quot]        Console[/FONT][/COLOR][FONT=&quot].WriteLine([COLOR=#2b91af]Constant[/COLOR].DeveloperName);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Program run လိုက်ရင် “Sevenlamp” ဆိုတဲ့ စာသားကို မရိုက်ပြခင်မှာ “print from static constructor” ဆိုတဲ့ စာသားကိုအရင် ရိုက်သွားတာ တွေ့ရမှာပါ။ ဒါပေမယ့် တစ်ခုသိထားရမှာက static constructor က static member တွေကို မခေါ်ခင် ပထမဆုံး တစ်ကြိမ်ပဲ အလုပ်လုပ်ပါတယ်။ ဒါကြောင့် ကျွန်တော်က developername ကို ၂ ကြိမ်ရိုက်ပြထားပေမယ့် “print from static constructor” ကတော့ တစ်ကြိမ်ပဲ ပေါ်လာမှာဖြစ်ပါတယ်။ ကဲ ဒီလောက်ဆို ကျွန်တော်တို့ constructor တွေ အကြောင်း နည်းနည်းနားလည်လာပြီ ထင်ပါတယ်။[/FONT]

    နောက်နေ့မှာ static member နဲ့ instant member အကြောင်း ဆက်ပြောပါမယ်။
  • edited September 2009 Registered Users
    အခုလိုပြောပေးတဲ့လူ ရှိလို့ အရမ်း၀မ်းသာပါတယ်ဗျာ။နောက်ထပ် သင်မဲ့ဟာတွေကို မျှော်နေမယ်လေ။
  • edited September 2009 Registered Users
    [FONT=&quot]class တစ်ခုထဲမှာ ရှိတဲ့ member တွေကို static member နဲ့ instant member ဆိုပြီး ၂ မျိုးခွဲ့ခြားနိုင်ပါသေးတယ်။ static member ကို class member လို့လည်း ခေါ်ပါတယ်။ instant member ကတော့ object member ပေါ့။ ဟုတ်ပြီ ဒါဆိုရင် အဲ့ဒီ static member တွေနဲ့ instant member တွေ ဘာကွာခြားလဲ ဆက်ကြည့်ရအောင်။ အဓိက ကွာခြားချက် ၄ ချက်လောက် ရှိတယ်ဗျ။ အရင်ဆုံး ဒီ program လေးကို run ကြည့်လိုက်ပါဦး။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Test[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]static[/COLOR] [COLOR=blue]string[/COLOR] clsVar;    [COLOR=green]// static member[/COLOR][/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]string[/COLOR] objVar;   [COLOR=green]// instant member[/COLOR][/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]void[/COLOR] Show()[/FONT] [SIZE=1][COLOR=SeaGreen]//instant member[/COLOR][/SIZE]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine(clsVar);  [COLOR=green]// use class member from instant member[/COLOR][/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine(objVar);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main([COLOR=blue]string[/COLOR][] args)[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test[/COLOR] t = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test[/COLOR]();[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test[/COLOR] t2 = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test[/COLOR]();[/FONT]
      [FONT=&quot]        t.objVar = [COLOR=#a31515]"this is object member"[/COLOR]; [COLOR=green]// call from object instant[/COLOR][/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test[/COLOR].clsVar = [COLOR=#a31515]"this is class member"[/COLOR];   [COLOR=green]// call from class name[/COLOR][/FONT]
      [FONT=&quot]        t.Show();[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine();[/FONT]
      [FONT=&quot]        t2.Show();[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]၁။ static member တွေ ကြေငြာဖို့အတွက် static keyword ကို သုံးရပါတယ်။ ရိုးရိုးmember တွေမှာတော့ static ထည့်ရန်မလိုပါ။ [/FONT]
    [COLOR=blue][FONT=&quot]public[/FONT][/COLOR][FONT=&quot] [COLOR=blue]static[/COLOR] [COLOR=blue]string[/COLOR] clsVar;    [COLOR=green]// static member[/COLOR][/FONT]
      [COLOR=blue][FONT=&quot]public[/FONT][/COLOR][FONT=&quot] [COLOR=blue]string[/COLOR] objVar;   [COLOR=green]// instant member[/COLOR][/FONT]
    
    [FONT=&quot]၂။ instant member တွေက class ကိုဆောက်တဲ့ object တွေမှာ တစ်ခုဆီ copy ပါသွားမှာ ဖြစ်ပေမယ့်၊ static member ကတော့ object အားလုံးအတွက် တစ်ခုထဲရှိမှာ ဖြစ်ပါတယ်။[/FONT]
    [COLOR=#2b91af][FONT=&quot]Test[/FONT][/COLOR][FONT=&quot] t = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test[/COLOR]();[/FONT]
      [COLOR=#2b91af][FONT=&quot]Test[/FONT][/COLOR][FONT=&quot] t2 = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test[/COLOR]();[/FONT]
    
    static_instant.PNG
    [FONT=&quot]၃။ instant member ကို object name ကနေ ပြန်ခေါ်သုံးရပြီး၊ static member ကိုသုံးဖို့အတွက်တော့ class name ကနေတဆင့်သာ ခေါ်ခွင့်ရှိပါတယ်။[/FONT]
    [FONT=&quot]t.objVar = [COLOR=#a31515]"this is object member"[/COLOR]; [COLOR=green]// call from object instant[/COLOR][/FONT]
      [COLOR=#2b91af][FONT=&quot]Test[/FONT][/COLOR][FONT=&quot].clsVar = [COLOR=#a31515]"this is class member"[/COLOR];   [COLOR=green]// call from class name[/COLOR][/FONT]
    
    [FONT=&quot]၄။ static member တွေကို instant member တွေကနေ တဆင့်ခေါ်သုံးခွင့်ရှိပါတယ်။ ဒါပေမယ့် instant member တွေကိုတော့ static member တွေကနေ ခေါ်ခွင့်မရှိပါဘူး။[/FONT]
    [COLOR=blue][FONT=&quot]public[/FONT][/COLOR][FONT=&quot] [COLOR=blue]void[/COLOR] Show()[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine(clsVar); [COLOR=green]// call class member from object member[/COLOR][/FONT]
      [FONT=&quot]            [COLOR=#2b91af]Console[/COLOR].WriteLine(objVar);[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ကျွန်တော်တို့ static member တွေကို အရင်က သုံးဖူးတယ်ထင်လား? ဟုတ်ကဲ့ သုံးဖူးပါတယ်။ ဥပမာအနေနဲ့ screen မှာ စာရိုက်ဖို့သုံးတဲ့ WriteLine function ကိုပဲ ကြည့်ပါ။ WriteLine function က Console Class ထဲက member function တစ်ခုပါ။ ဒါပေမယ့် ကျွန်တော်တို့ WriteLine function ကိုသုံးဖို့အတွက် Console Class ကို object ဆောက်ပါသလား။ မဆောက်ဖူးနော် class name ကနေပဲ ခေါ်သုံးသွားတာပါ Console.WriteLine() ဆိုပြီးလေ။ အိုကေ အဲ့ဒီလို ခေါ်ခွင့်ရှိတာ WriteLine function က static member function ဖြစ်နေလို့ပါ။ ကဲ ကျွန်တော်တို့ class member ကိုသုံးပြီး program တစ်ခုလောက်ရေးကြည့်ရအောင်။ အဲ့ဒီ program လေးမှာ ကျွန်တော်တို့ customer တစ်ယောက် အသစ်ထည့်လိုက်တိုင်း account number auto ပေါ်လာချင်တယ်။ ပြီးတော့ customer စုစုပေါင်း ဘယ်နှစ်ယောက် ရှိလဲဆိုတာကို ပြန်ပြပေးချင်တယ်။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Customer[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] acno;[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] name;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] Customer([COLOR=blue]string[/COLOR] name)[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]this[/COLOR].acno = GetNewAcno(); [COLOR=green]//call static member function[/COLOR][/FONT]
      [FONT=&quot]        [COLOR=blue]this[/COLOR].name = name;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]override[/COLOR] [COLOR=blue]string[/COLOR] ToString()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] acno + [COLOR=#a31515]"-"[/COLOR] + name;[/FONT]
      [FONT=&quot]    }[/FONT]
      
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]static[/COLOR] [COLOR=blue]int[/COLOR] counter = 0;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]static[/COLOR] [COLOR=blue]string[/COLOR] GetNewAcno()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        counter++;[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] [COLOR=#a31515]"C"[/COLOR] + counter.ToString([COLOR=#a31515]"D3"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]public[/FONT][/COLOR][FONT=&quot] [COLOR=blue]class[/COLOR] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Customer[/COLOR] a = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Customer[/COLOR]([COLOR=#a31515]"Mg Mg"[/COLOR]);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Customer[/COLOR] b = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Customer[/COLOR]([COLOR=#a31515]"Zw Zw"[/COLOR]);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Customer[/COLOR] c = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Customer[/COLOR]([COLOR=#a31515]"Ag Ag"[/COLOR]);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0}"[/COLOR], a);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0}"[/COLOR], b);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"{0}"[/COLOR], c);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Customer Count is {0}"[/COLOR], [COLOR=#2b91af]Customer[/COLOR].counter);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
  • edited September 2009 Registered Users
    [FONT=&quot]ဒီနေ့ ကျွန်တော်တို့ C# ရဲ့ property တွေ အကြောင်း ပြောကြရအောင်။ အရင်ဆုံး property တွေ ဘယ်လိုကြောင့် ဖြစ်ပေါ်လာလဲ အရင်စပြောပါ့မယ်။ ဟုတ်ပြီ ကျွန်တော်တို့ class တစ်ခုထဲက instant member data တွေကို တခြား class တွေကနေ ခေါ်သုံးမယ်ဆိုရင် အဲ့ဒီ instant member ရဲ့ရှေ့မှာ public keyword ထည့်ပြီး ကြေငြာပေးရပါတယ်။ ဒီလိုမျိုးပါ…[/FONT]
        [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Test_A[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] var;[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test_A[/COLOR] obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test_A[/COLOR]();[/FONT]
      [FONT=&quot]        obj.var = 1;[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine(obj.var);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒီ program လေးကိုကြည့်ကြည့်ပါ။ Test_A class ထဲက var ဆိုတဲ့ variable ကို program class ထဲကနေခေါ်ပြီး တန်ဖိုးထည့်တယ်။ ပြီးတော့ ပြန်ရိုက်ထုတ်တယ်။ ဒီလိုခေါ်လို့ ရဖို့အတွက် Test_A ထဲမှာ public ဆိုပြီး ကြေငြာပေးရတယ်။ ဒီလို member data တွေကို public လုပ်ပြီး အပြင်ကနေ ခေါ်သုံးတာက ရေးရတာ လွယ်ပါတယ်၊ ဒါပေမယ့် Object-oriented ဆိုပြီး အော်လာကြတဲ့ သကာလမှာ data hiding ဆိုတဲ့ rule လေးတစ်ခုပါပါလာပါတယ်။ အဲ့ဒီ rule ကတော့ member data တွေကို အပြင်ကနေ တိုက်ရိုက်ခေါ်ပြီး မသုံးရပါဘူး၊ hide လုပ်ထားပါတယ်။ ဒါဆိုရင် အဲ့ဒီ member ကို အပြင်ကနေဘယ်လိုခေါ်မလဲ။ ဟုတ်ကဲ့ အဲ့ဒီလိုခေါ်ဖို့အတွက် အစောပိုင်းကာလတွေမှာ ကျွန်တော်တို့ member function တွေကို သုံးရပါတယ်။ ဒီလိုမျိုးပါ….[/FONT]
        [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Test_B[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]private[/COLOR] [COLOR=blue]int[/COLOR] var;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]void[/COLOR] SetData([COLOR=blue]int[/COLOR] value)[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        var = value;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] GetData()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] var;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test_B[/COLOR] obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test_B[/COLOR]();[/FONT]
      [FONT=&quot]        obj.SetData(2);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine(obj.GetData());[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      
    
    [FONT=&quot]ဒီ program လေးကိုကြည့်လိုက်ပါ။ Type_B class ထဲက member variable ကို အပြင်ကနေ ခေါ်သုံးလို့မရအောင် private လုပ်လိုက်ပါတယ်။ ပြီးတော့မှ အဲ့ဒီ member data ထဲကို တန်ဖိုးထည့်ဖို့ SetData function နဲ့ တန်ဖိုးပြန်ထုတ်ဖို့ GetData function ကိုရေးပေးပါတယ်။ အဲ့ဒီ function တွေကိုတော့ public လုပ်ပေးရပါမယ်။ ဒီလိုရေးလိုက်ခြင်းအားဖြင့် data hiding rule ကို လိုက်နာပြီးသားဖြစ်သွားပါတယ်။ ခုလိုမျိုး function ကနေတဆင့် တန်ဖိုးအသွင်းအထုတ်လုပ်တာ မရဘူးလားဆိုတော့ ရပါတယ်၊ ဒါပေမယ့် member variable ကို ခေါ်သုံးရတာလောက်တော့ မလွယ်ကူပါဘူး။ အနည်းဆုံးတော့ member data တစ်ခုအတွက် function ၂ခု မှတ်နေရပါတယ်။ ဒါကြောင့် C# language မှာတော့ data hiding rule ကိုလည်း လိုက်နာပြီး member data ကိုခေါ်သလိုလည်း လွယ်လွယ်ကူကူ ခေါ်လို့ရအောင် property ဆိုတာကို သုံးလာကြပါတယ်။ ကဲ property ကို ဘယ်လိုရေးရလဲ….[/FONT]
        [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Test_C[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]private[/COLOR] [COLOR=blue]int[/COLOR] var;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] MyVar[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]get[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]return[/COLOR] var;[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]        [COLOR=blue]set[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            var = [COLOR=blue]value[/COLOR];[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Test_C[/COLOR] obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Test_C[/COLOR]();[/FONT]
      [FONT=&quot]        obj.MyVar = 3;[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine(obj.MyVar);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      
    
    [FONT=&quot]Property ရေးတဲ့ ပုံစံက member function နဲ့တော့ဆင်ပါတယ်။ အရင်ဆုံး အပြင်ကနေခေါ်သုံးလို့ရအောင် public ကြေငြာပေးရပါတယ်။ ပြီးရင်property ကနေ return ပြန်မယ့် data type ကြေငြာရမယ်၊ အဲ့ဒီနောက်မှာတော့ property ရဲ့ name ပေါ့။ function နဲ့မတူတဲ့ အချက်ကတော့ property မှာ parameter လက်ခံတဲ့ အပိုင်းမပါပါဘူး။ property ထဲကို တန်ဖိုးထည့်ဖို့အတွက် set keyword နဲ့ တန်ဖိုးထုတ်ဖို့အတွက် get keyword ကိုသုံးရပါတယ်။ ဆိုလိုတာကတော့ property မှာ get နဲ့ set ဆိုပြီး အပိုင်း၂ ပိုင်းပါ၀င်ပါတယ်။ property ထဲက user က တန်ဖိုးထည့်လိုက်တဲ့ အခါ အဲ့ဒီ property ထဲက set အပိုင်းထဲမှာ ရေးထားတဲ့ code တွေကို အလုပ်လုပ်ပါတယ်။ user ထည့်လိုက်တဲ့ တန်ဖိုးကတော့ value လို့ခေါ်တဲ့ keyword ထဲကိုရောက်သွားပါတယ်။ အဲ့ဒီကနေတဆင် member data ထဲကိုထည့်ပေးပါတယ်။ property ထဲက တန်ဖိုးထုတ်တဲ့အခါမှာတော့ get ထဲမှာ ရေးထားတဲ့ code တွေက အလုပ်လုပ်ပေးပါတယ်။ property ကို အပြင်ကနေ ခေါ်တဲ့ ပုံစံကတော့ ရိုးရိုး member data ကိုခေါ်သလိုပဲ ခေါ်ရပါတယ်။ အိုကေ… အခုကျွန်တော်တို့ Property တွေ ရေးတက်ပြီလိုထင်ပါတယ်။ property ကို member data တွေကို ကိုယ်စားပြုဖို့ သုံးတာများပေမယ့် member data မရှိပဲနဲ့လည်း property ကိုပဲရေးလို့လည်း ရပါတယ်။ ဒီ example program လေး ရေးပြီး run ကြည့်ပါဦး။[/FONT]
        [COLOR=blue][FONT=&quot]using[/FONT][/COLOR][FONT=&quot] System;[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]myNumber[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]private[/COLOR] [COLOR=blue]int[/COLOR] num;[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]string[/COLOR] Num[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]get[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]return[/COLOR] num.ToString();[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]        [COLOR=blue]set[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]try[/COLOR][/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                num = [COLOR=#2b91af]Convert[/COLOR].ToInt32([COLOR=blue]value[/COLOR]);[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]            [COLOR=blue]catch[/COLOR][/FONT]
      [FONT=&quot]            {[/FONT]
      [FONT=&quot]                num = 0;[/FONT]
      [FONT=&quot]            }[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]int[/COLOR] Square[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]get[/COLOR][/FONT]
      [FONT=&quot]        {[/FONT]
      [FONT=&quot]            [COLOR=blue]return[/COLOR] num * num;[/FONT]
      [FONT=&quot]        }[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]myNumber[/COLOR] obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]myNumber[/COLOR]();[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Write([COLOR=#a31515]"Enter a number : "[/COLOR]);[/FONT]
      [FONT=&quot]        obj.Num = [COLOR=#2b91af]Console[/COLOR].ReadLine();[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Square of {0} is {1}"[/COLOR], obj.Num, obj.Square);[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      
    
  • edited September 2009 Registered Users
    အစ်ကိုရေ ခုလိုအသေးစိတ်ရှင်းပြပေးထားလို့ကျေးဇူးပါပဲ..နောက်တင်မဲ့ပို့စ်တွေကို ဆက်လက်လေ့လာသွားပါ့မယ်..
  • edited September 2009 Registered Users
    အစ်ကိုရေ လေ့လာနေတယ်ဗျာ.
    ဆက်ရေးပါ
    ကောင်းတယ်
    အားပေးတယ်

    အခုထိ ပြီးသလောက်ကို pdf လေး ထုတ်လိုက်ရင် ပိုအဆင်ပြေမယ်ခင်ဗျ

    :D :D :D
  • edited September 2009 Registered Users
    SYKO wrote: »
    အစ်ကိုရေ လေ့လာနေတယ်ဗျာ.
    ဆက်ရေးပါ
    ကောင်းတယ်
    အားပေးတယ်

    အခုထိ ပြီးသလောက်ကို pdf လေး ထုတ်လိုက်ရင် ပိုအဆင်ပြေမယ်ခင်ဗျ

    :D :D :D

    အားပေးတာ ကျေးဇူးတင်ပါတယ်ဗျာ။
    ကျွန်တော် အဆင်ပြေရင် PDF ထုတ်ပေးပါမယ့်။ basic အားလုံး ပြီးမှ ထုတ်ရင် ကောင်းမလားလို့ အခု မထုတ်သေးတာပါ။
  • edited September 2009 Registered Users
    [FONT=&quot]ကဲ ဒီနေ့တော့ database အပိုင်းလေး ခဏနားပြီး C# ဘက်ကို နည်းနည်းပြန်လှည့်အောင်။ ကျွန်တော်တို့ အခုနောက်ပိုင်း programming language မှာ အသံကျယ်ကျယ်လောင်လောင် ဖြစ်လာတာက OOT လို့ ခေါ်တဲ့ Object-Oriented Technique ပဲဖြစ်ပါတယ်။ OO မှာ ဘာတွေပါလဲ… [/FONT]
    [FONT=&quot]အမွေဆက်ခံခြင်းလို့ ခေါ်တဲ့ inheritance၊ [/FONT]
    [FONT=&quot]အသွင်ပြောင်းခြင်းလို့ပြောလို့ရတဲ့ Polymorphism၊ [/FONT]
    [FONT=&quot]Data hiding လို့ခေါ်တဲ့ member data တွေကို သို၀ှက်သိမ်းဆည်းထားခြင်း၊ [/FONT]
    [FONT=&quot]Encapsulation သိမ်းဆည်းထားတဲ့ member data တွေကို တဆင့်ခံဖြင့် သုံးခွင့်ပေးခြင်း၊ [/FONT]
    [FONT=&quot]စသည်ဖြင့်ပေါ့ဗျာ.. အဲ့ဒါတွေ ပါပါတယ်။ [/FONT]

    [FONT=&quot]Inheritance အမွေဆက်ခံခြင်းဆိုတာဘာလဲ??? [/FONT]
    [FONT=&quot]ဒီလိုလေးတွေးကြည့်ရအောင်ဗျာ အခုကျွန်တော်တို့ မိဘတွေပိုင်ဆိုင်တဲ့ ပိုင်ဆိုင်မှုတွေဟာ ကျွန်တော်တို့ရဲ့ ပိုင်ဆိုင်မှုတွေပါပဲ။ ဒီလိုပါပဲ ကျွန်တော်တို့ရဲ့ ပိုင်ဆိုင်မှုတွေကိုလည်း ကျွန်တော်တို့ရဲ့ မျိုးဆက်သစ်တွေက ပိုင်ဆိုင်ကြဦးမှပါ။ ဒီသဘောတရားလေးကို ယူပြီး OOမှာ inheritance ဆိုတာပေါ်ပေါက်လာတာပါ။ class တစ်ခုရဲ့ ပိုင်ဆိုင်မှု property တွေဟာ အဲ့ဒီ class ရဲ့ child တွေကလည်း ပိုင်ဆိုင်နိုင်ပါတယ်။ ဒီလို ပိုင်ဆိုင်နိုင်ခြင်းအားဖြင့် ကျွန်တော်တို့က class တွေအားလုံး အတွက် တူညီတဲ့ property တွေကို အကြိမ်ကြိမ်ကြေငြာပေးနေစရာ မလိုတော့ပါဘူး။ ဥပမာဗျာ ကျွန်တော်က လူတစ်ယောက်ကို ကိုယ်စားပြုမယ့် class တစ်ခုဆောက်မယ်ဆိုရင် အဲ့ဒီ class ထဲမှာ ဘယ်လို member တွေပါမလဲ စဉ်းစားကြည့်၊ နံမည်ပါမယ်၊ အသက်ပါမယ်၊ နေရပ်လိပ်စာပါမယ်ဗျာ၊ စသည်ဖြင့်ပေါ့။[/FONT]
    
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]People[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] Name;[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Age;[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] Address;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ကဲ…အခု နောက်တစ်ခါ ကျွန်တော်က ကျောင်းသားတစ်ယောက်ကို ကိုယ်စားပြုမယ့် class တစ်ခုထပ်ဆောက်ဖို့ လိုလာပြီဆိုရင်ရော ဘယ်လို member တွေပါမလဲ၊ ကျောင်းသားမှာလည်း နံမယ်ပါမယ်၊ အသက်ပါမယ်၊ လိပ်စာပါမှာပါပဲ၊ ကျောင်းသားမှာ ပိုပါလာတာက roll နံပါတ်ပါမယ်၊ class ပါပါမယ်။[/FONT]
    
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Student[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] Name;[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Age;[/FONT]
      [FONT=&quot]    [COLOR=blue]string[/COLOR] Address;[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Roll;[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Class;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဟုတ်ပြီ ဒီလိုအခြေအနေမျိုးမှာ နံမည်တို့ အသက်တို့ကို ထပ်ပြီး မကြေငြာချင်ဘူးဆိုရင် ကျွန်တော်တို့ Student class ကို People class ရဲ့ child အဖြစ် ကြေငြာလို့ ရပါတယ်။ ဒီလိုမျိုးပါ…[/FONT]
    
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Student[/COLOR] : [COLOR=#2b91af]People[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Roll;[/FONT]
      [FONT=&quot]    [COLOR=blue]int[/COLOR] Class;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဒါကိုinheritance လုပ်တယ်လို့ ခေါ်ပါတယ်။ inheritance လုပ်လိုက်ခြင်းအားဖြင့် People class ထဲက member data ကို Student class ထဲမှာ ပြန်ပြီ ကြေငြာပေးနေစရာ မလိုတော့ပါဘူး။ ဒါပေမယ့် ဒီနေရာမှာ အရေးကြီးတဲ့ အချက်တစ်ချက်ကို သိထားဖို့ လိုပါသေးတယ်။ ဒီလိုဗျာ ကျွန်တော်တို့ မိဘရဲ့ ပိုင်ဆိုင်မှုအားလုံး ကျွန်တော်တို့ရမလား၊ မရပါဘူး သူတို့ ကိုယ်ပိုင်အတွက် သိမ်းထားတာတွေလည်း ရှိနိုင်ပါတယ်။ C# language မှာလဲ အဲ့ဒီလိုမျိုး ခွဲခြားဖို့အတွက် ကျွန်တော်တို့ Access Modifier ဆိုတာကို သိဖို့လိုအပ်လာပါတယ်။ C# language မှာ access modifier ၅ မျိုးရှိပါတယ်။ အဲ့ဒါတွေ ကတော့ [/FONT]
    [FONT=&quot]-[/FONT][FONT=&quot]public ( အများသုံး )[/FONT]
    [FONT=&quot]-[/FONT][FONT=&quot]protected ( မိမိနှင့်child တွေသုံး )[/FONT]
    [FONT=&quot]-[/FONT][FONT=&quot]private ( မိမိကိုယ်တိုင်သုံး )[/FONT]
    [FONT=&quot]-[/FONT][FONT=&quot]internal ( library တူအတွင်းသုံး )[/FONT]
    [FONT=&quot]-[/FONT][FONT=&quot]protected internal ( child ဖြစ်လျှင်၄င်း၊ library တူလျှင်၄င်း သုံး )[/FONT]

    [FONT=&quot]စသည်တို့ ဖြစ်ပါတယ်။ အပေါ်က example People class လေးမှာ ကျွန်တော်တို့ access modifier မထည့်ပေးလိုက်ပါဘူး။ ဒါဆိုရင် default အနေနဲ့ private ပါ။ ဒါကြောင့် People class ထဲက member data သုံးခုက people class အတွင်းမှာပဲ သုံးခွင့်ရှိပါတယ်။ Student မှာ သုံးလို့ မရပါဘူး။ အခုကျွန်တော်တို့က Student class ထဲကနေပါ သုံးခွင့်ရချင်တာဖြစ်လို့ protected member အဖြစ်ကြေငြာပေးရမှာပါ။[/FONT]
    
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]People[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]protected[/COLOR] [COLOR=blue]string[/COLOR] Name;[/FONT]
      [FONT=&quot]    [COLOR=blue]protected[/COLOR] [COLOR=blue]int[/COLOR] Age;[/FONT]
      [FONT=&quot]    [COLOR=blue]protected[/COLOR] [COLOR=blue]string[/COLOR] Address;[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Polymorphism အသွင်ပြောင်းခြင်းဆိုတာကရော???[/FONT]
    [FONT=&quot]ကျွန်တော်တို့ ရပ်ကွက်တွေမှာလုပ်လေ့ရှိတယ်ဗျာ တခါတလေ ရပ်ကွက်ရုံးကနေပြီးတော့ တစ်အိမ်ကို လူတစ်ယောက်နှုန်း အစည်းအေ၀းတက်ရမယ်တို့ ဘာတို့ ကြုံဖူးမှာပေါ့။ ဟုတ်ကဲ့ ရပ်ကွက်ရုံးက ခေါ်တာက လူတစ်ယောက်လို့ ခေါ်တာပါ တနည်းအားဖြင့် people class ကို ခေါ်တာပါ။ အဲ့ဒါကို အိမ်မှာ ရှိနေတဲ့ ကျောင်းသားတစ်ယောက်က သွားတက်လို့ မရဘူးလား၊ ရပါတယ်။ Teacher တစ်ယောက်သွားတက်မယ်ဆိုလို့လဲ ရပါတယ်။ Teacher ကလည်း people တစ်ယောက်ပဲ ဖြစ်လို့ပါ။ ဒါပေမယ့် Student ပဲ သွားသည်ဖြစ်စေ၊ Teacher ပဲသွားသည်ဖြစ်စေ၊ ဒါမှမဟုတ် People ကိုယ်တိုင်ပဲ သွားသည်ဖြစ်စေ၊ အားလုံးကို People လို့ပဲ မြင်ပါတယ်။ အားလုံး အခွင့်အရေးတန်းတူပါပဲ။ Student မို့ အခွင့်အရေးပိုရမလား မရပါဘူး။ အိုကေ အဲ့ဒီလိုမျိုး People ကိုခေါ်တာကို Stuent သွားလိုက်တာကို အသွင်ပြောင်းလဲခြင်း ( polymorphism ) လို့ ခေါ်ပါတယ်။[/FONT]
    
      [COLOR=blue][FONT=&quot]static[/FONT][/COLOR][FONT=&quot] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=#2b91af]People[/COLOR] p;[/FONT]
      [FONT=&quot]    p = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]Student[/COLOR]();[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]Polymorphism မှာ သတိထားရမည့် အချက်ကတော့ child ကို parent အသွင်ပြောင်းနိုင်ပေမယ့် parent ကိုတော့ child အဖြစ်ပြောင်းလို့ မရပါဘူး။ ဆိုလိုတာကတော ကျောင်းသားအားလုံး စာမေးပွဲလာဖြေပါဆိုပြီး ခေါ်တာကို အိမ်မှာ ရှိတဲ့ လူကြီးတွေသွားဖြေလို့ ရမလား မရပါဘူး၊ ဒီသဘောပါ။ Student ကိုတောင်းရင်တော့ People ပေးလို့ မရပါဘူး၊ Student ပဲ ပေးမှ ရမှာပါ။[/FONT]
    [FONT=&quot]Data Hiding [/FONT]
    [FONT=&quot]Data hiding ဆိုတာကတော့ ကျွန်တော်တို့ အိမ်မှာ မိသားစုပိုင်ဆိုင်မှုတွေကို တခြားလူတွေသိအောင် ထုတ်ကြေငြာလေ့ရှိလား? မရှိပါဘူး တိတ်တိတ်လေးပဲ သိမ်းထားလေ့ရှိပါတယ်။ ဒီသဘောပါပဲ class တွေထဲမှာရှိတဲ့ member data တွေကိုလည်း အပြင်ကနေ ခေါ်လို့မရအောင် private လုပ်ထားခြင်းကို data hiding လို့ ခေါ်ပါတယ်။[/FONT]
    [FONT=&quot]Encapsulation[/FONT]
    [FONT=&quot]Encapsulation ဆိုတာကတော့ ကျွန်တော်တို့ hide လုပ်ထားတဲ့ data ထဲက လိုအပ်တဲ့ dataတွေကို function တွေကနေသော်လည်းကောင်း၊ property တွေကနေတဆင့်သော်လည်းကောင်း၊ အသုံးပြုနိုင်ဖို့အတွက် စီမံပေးခြင်းပဲ ဖြစ်ပါတယ်။[/FONT]
  • edited October 2009 Registered Users
    [FONT=&quot]Function Overloading Vs Function Overriding[/FONT]

    [FONT=&quot]ကျွန်တော်တို့ ဒီနေ့ function overloading နဲ့ function overriding အကြောင်းလေး ပြောကြရအောင်။ အရင်ဆုံး function overloading အကြောင်းပြောရအောင်။ overload ဆိုတာ အလုပ်တစ်ခုထက်ပိုပြီး လုပ်တာကို ပြောချင်တာပါ။ function overloading ဆိုတော့ ကျွန်တော်တို့ ရေးလိုက်တဲ့ function က တာ၀န် တစ်ခုထက်ပိုပြီး လုပ်ဆောင်ပေးတာကိုရည်ရွယ်တာပါ။ function name က တစ်ခုထဲပဲ ဒါပေမယ့် လုပ်ဆောင်မှုအများကြီး လုပ်နိုင်အောင်ပေါ့။ ဥပမာဗျာ.. ကျွန်တော်က string ကနေ integer ပြောင်းတဲ့ function လေးတစ်ခုလောက် ရေးချင်တယ်။[/FONT]
    [COLOR=blue][FONT=&quot]static[/FONT][/COLOR][FONT=&quot] [COLOR=blue]int[/COLOR] ConvertToInteger([COLOR=blue]string[/COLOR] st)[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]try[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] [COLOR=#2b91af]Convert[/COLOR].ToInt32(st);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]catch[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] 0;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ကဲ.. ဒီ function လေး ရေးလိုက်ခြင်းအားဖြင့် ကျွန်တော်တို့ string ကနေ integer ပြောင်းချင်တိုင်း လွယ်လွယ်ကူကူ ခေါ်လို့ ရသွားမယ်။ ဒါပေမယ့် တခြား type တွေကနေပြောင်းချင်ရင် ဒီ function သုံးလို့ ရမလား။ မရပါဘူး။ ဒါဆို ကျွန်တော်က တခြားtype တွေ အတွက်ကိုလည်း ဒီလိုမျိုး function တွေ ထပ်ရေးပေးဖို့ လိုပါလိမ့်မယ်။ [/FONT]
    [COLOR=blue][FONT=&quot]static[/FONT][/COLOR][FONT=&quot] [COLOR=blue]int[/COLOR] ConvertToInteger([COLOR=blue]decimal[/COLOR] dec)[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]try[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] [COLOR=#2b91af]Convert[/COLOR].ToInt32(dec);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]catch[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] 0;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]static[/FONT][/COLOR][FONT=&quot] [COLOR=blue]int[/COLOR] ConvertToInteger([COLOR=blue]long[/COLOR] l)[/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]try[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] [COLOR=#2b91af]Convert[/COLOR].ToInt32(l);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]    [COLOR=blue]catch[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=blue]return[/COLOR] 0;[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ဟုတ်ပြီနော်.. အခုလိုမျိုး function name တူပြီး parameter မတူတဲ့ function တွေ တစ်ခုထက်ပိုပြီး ရေးလိုက်တာကို function overloading လုပ်တယ်လို့ ခေါ်ပါတယ်။ function overloading လုပ်ခြင်း အားဖြင့် ဘာပိုကောင်းလာမလဲ။ ဟုတ်ကဲ့ ကျွန်တော်တို့ program ရေးတဲ့နေရာမှာ အများကြီးပိုပြီး လွယ်ကူစေပါတယ်။ အကယ်လို့သာ function overload မလုပ်ရဘူးဆိုရင် ကျွန်တော်တို့ string ကနေ integer ပြောင်းဖို့အတွက်က function name တစ်ခု၊ decimal ကနေ integer ပြောင်းဖို့အတွက်က function name တစ်ခု၊ long ကနေ integer ပြောင်းဖို့အတွက်က function name တစ်ခု စသည်ဖြင့် name တွေ အများကြီး သုံးနေမှတ်နေရမှာပေါ့။ အခု overloading လုပ်ခြင်းအားဖြင့် function name တစ်ခုထဲကိုပဲ သိဖို့ လိုပါတော့တယ်။ Framework class library ထဲမှာလည်း overload လုပ်ထားတဲ့ function တွေ အများကြီး တွေရမှာပါ။ ကဲ အနှစ်ချုပ်ပြန်ပြောပါမယ် function overloading ဖြစ်ဖို့အတွက် function name တူရပါမယ်၊ argument (parameter) မတူရပါဘူး။ parameter မတူရဘူး ဆိုတာမှာ parameter ရဲ့ datatype ဖြစ်စေ၊ အရည်အတွက် ဖြစ်စေမတူရင် ရပါတယ်။[/FONT]

    [FONT=&quot]နောက်တစ်ခုကတော့ function overriding။ overriding လို့ ပြောတဲ့ အတိုင်းပါပဲ၊ function overrideing ဆိုတာက function တစ်ခုပေါ်မှာ နောက်ထပ် function တစ်ခုနဲ့ ထပ်ပြီး အုပ်လိုက်တာကို ပြောချင်တာပါ။ ဒီလိုလုပ်လိုက်ရင် function ၂ ခု ဖြစ်သွားမလား၊ မဖြစ်ပါဘူး။ override လုပ်ခြင်းခံရတဲ့ function က ပျောက်သွားမှာပါ။ function overrideing ကို အဓိကအားဖြင့် polymorphism နဲ့ တွဲပြီးသုံးလေ့ ရှိပါတယ်။ parent class ထဲမှာ ရှိပြီးသား function တစ်ခုကို child class ထဲမှာပြန်ပြီးရေးချင်တယ် ဆိုရင် override လုပ်ဖို့ လိုလာပါပြီ။ ဒီလို အချိန်မျိုးမှာ function overriding ကိုသုံးပါတယ်။ ဥပမာလေးနဲ့ ပြောရရင်… ကျွန်တော်မှာ animal ဆိုတဲ့ class ရှိတယ်ဗျာ၊ parent class ပေါ့၊ အဲ့ဒီ animal class ထဲမှာ eat() ဆိုတဲ့ function လေးပါတယ်။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]void[/COLOR] eat()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Eat something"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]အိုကေ.. အဲ့ဒီ animal class မှာ child class ၂ ခုရှိတယ်။ dog class နဲ့ ant class ပေါ့။ အဲ့ဒီ dog class နဲ့ ant class က animal class ကနေ inheritance လုပ်ထားတာဖြစ်တဲ့ အတွက် သူတို့ဆီမှာ eat() function အလိုအလျှောက် ပါလာပါတယ်။ အဲ့ဒီ parent class ကနေပါလာတဲ့ eat() function ထဲက statement တွေကို child class မှာ မလိုချင်ဘူး။ ပိုပြီး detail ကြတဲ့ message နဲ့ အစားထိုးချင်တယ်ဆိုပါတော့ (ဥပမာ.. Eat something အစား၊ Eat Bone တို့ Eat sugur တို့နဲ့ အစားထိုးချင်ပြီဆိုရင်)၊ ဒါဆို ဘယ်လိုလုပ်မလဲ? နောက်ထပ် function တစ်ခုထပ်ဆောက်ချင်တာ မဟုတ်ဘူးနော်၊ parameter လည်း မပြောင်းတဲ့ အတွက် overloading လည်း လုပ်လို့ မရဘူး။ ဒီလို အခြေအနေမျိုးမှာ ကျွန်တော်တို့ မဖြစ်မနေ function overriding လုပ်ဖို့ လိုလာပါပြီ။[/FONT]

    [FONT=&quot]ဒါဆို function overriding လုပ်ဖို့ ဘာလိုမလဲ? Parent class ထဲမှာ ဒီတိုင်းရေးထားတဲ့ function တိုင်းကိုတော့ override လုပ်လို့ မရပါဘူး။ override လုပ်ဖို့ ခွင့်ပြုထားတဲ့ function တွေကိုပဲ လုပ်လို့ရတာပါ။ ဒီလို override လုပ်ဖို့ ခွင့်ပြုချင်တယ်ဆိုရင် parent class ထဲက function ရဲ့ရှေ့မှာ virtual ဆိုတဲ့ keyword လေးထည့်ရေးပေးလိုက်ရပါတယ်။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [B][COLOR=blue]virtual[/COLOR][/B] [COLOR=blue]void[/COLOR] eat()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Eat something"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]override ပြန်လုပ်မယ့် child class က function ရှေ့မှာတော့ override ဆိုတဲ့ keywordကို ထည့်ပေးရပါတယ်။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]dog[/COLOR] : [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [B][COLOR=blue]override[/COLOR][/B] [COLOR=blue]void[/COLOR] eat()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Eat Bone!"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
    [FONT=&quot]ကဲ… example program လေး တစ်ခုလောက်ရေးကြည့်ပါဦး။[/FONT]
    [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]virtual[/COLOR] [COLOR=blue]void[/COLOR] eat()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Animal: Eat something"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]dog[/COLOR] : [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]override[/COLOR] [COLOR=blue]void[/COLOR] eat() [COLOR=green]// function overriding[/COLOR][/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Dog: Eat Bone!"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]ant[/COLOR] : [COLOR=#2b91af]animal[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]public[/COLOR] [COLOR=blue]override[/COLOR] [COLOR=blue]void[/COLOR] eat()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].WriteLine([COLOR=#a31515]"Ant: Eat Sugar"[/COLOR]);[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
      [COLOR=blue][FONT=&quot]class[/FONT][/COLOR][FONT=&quot] [COLOR=#2b91af]Program[/COLOR][/FONT]
      [FONT=&quot]{[/FONT]
      [FONT=&quot]    [COLOR=blue]static[/COLOR] [COLOR=blue]void[/COLOR] Main()[/FONT]
      [FONT=&quot]    {[/FONT]
      [FONT=&quot]        [COLOR=#2b91af]animal[/COLOR] obj;[/FONT]
      [FONT=&quot]        obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]animal[/COLOR]();[/FONT]
      [FONT=&quot]        obj.eat();[/FONT]
      
      [FONT=&quot]        obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]dog[/COLOR](); [COLOR=green]//polymorphism[/COLOR][/FONT]
      [FONT=&quot]        obj.eat();[/FONT]
      
      [FONT=&quot]        obj = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]ant[/COLOR]();[/FONT]
      [FONT=&quot]        obj.eat();[/FONT]
      
      [FONT=&quot]        [COLOR=#2b91af]Console[/COLOR].Read();[/FONT]
      [FONT=&quot]    }[/FONT]
      [FONT=&quot]}[/FONT]
    
  • edited October 2009 Registered Users
    နည်းနည်းလောက်များများလေးမေးချင်ပါတယ်..
    ရှုပ်သွားတယ်ဆိုရင်တော့တောင်းပန်ပါတယ်..
    ကျွန်တော်သိချင်တာက....
    ၁။program ရေးရအောင် တကယ်လို့ဘာမှမတတ်သေးတယ့်သူဆိုဘယ်ကစလေ့လာရမှာလဲ
    ၂။ပြီးတော့ အဲလို java,c++ တို့ကဘယ်နှစ်မျိုးလောက်ရှိတာလဲ..
    ၃။အခုမှအခြေခံကိုလေ့လာမယ်ဆို ဘယ်ကစလေ့လာရမှာလဲ
    ဘာကိုလေ့လာသင့်ပါသလဲ


    အဲဒါလေးတွေသိချင်ပါတယ်..
    ကျွန်တော်သိတာက ဆော့၀လ်ရေးတာကို အဲဒါတွေနဲ့ရေးရတယ်လို့ပဲသိတာပါ..
    လေ့လာချင်တယ်..ဘယ်အပိုင်းကိုလေ့လာရမယ်ဆိုတာကိုမသိတာပါ.
    ဖြေပေးနိုင်မယ်ဆိုဖြေပေးစေချင်ပါတယ် ခင်ဗျာ
  • edited October 2009 Registered Users
    ကို sevenlamp ရေ.. ဆက်ပြီးတော့ သင်ခန်းစာလေးတွေ သင်ကြားမျှေ၀ပေးပါဦး.. ကျွန်တော် လည်း C# ကို အခုမှ ပြန်လေ့လာနေရတာ ဆိုတော့ အကို့ရဲ့ သင်ခန်းစာလေးတွေက တော်တော်လေး အထောက်အကူပြုပါတယ်.. ဆက်လက်ပြီး ရေးပေးပါဦးဗျာ.. နောက်ပြီးတော့ visual C#.net window form application သင်ခန်းစားလေးတွေလည်း အခုလို မျှေ၀းပေးပါဦး.. ကျွန်တော်က အခုမှ C# ကို စလေ့လာနေရတာ မို့လို့ပါ။
  • edited October 2009 Registered Users
    thanks a lot bro :)
    i'm waiting for ur next lessons :)
  • edited October 2009 Registered Users
    ၁။program ရေးရအောင် တကယ်လို့ဘာမှမတတ်သေးတယ့်သူဆိုဘယ်ကစလေ့လာရမှာလဲ
    ဘာမှမတက်သေးတဲ့သူဆိုရင် အကောင်းဆုံး အကြံပေးချင်တာက... programming သင်တန်းတစ်ခုခုကို အရင်ဆုံး စပြီး တက်လိုက်စေချင်ပါတယ်။ အဲ့ဒီလို သင်တန်းတက်လိုက်တဲ့ အခါမှာ programming ဆိုတာဘာလဲလို့ သိသွားပါလိမ့်မယ်။ အဲ့ဒီ အသိလေးကို အခြေခံပြီးတော့မှ နောက်ပိုင်းကိုတော့ ကိုယ်တိုင်လေ့လာသွားသင့်ပါတယ်။ ဘာသင်တန်းမှ မတက်ပဲ ကိုယ်တိုင်စလုပ်မယ်ဆိုလည်း မဖြစ်ဘူးလား ဆိုတော့ ဖြစ်ပါတယ် ဒါပေမယ့် အစပိုင်းမှာ စမ်းတ၀ါး၀ါးနဲ့ လမ်းစပျောက်တဲ့လူလို့ ဖြစ်မှာ စိုးလို့ပါ။ ဘယ်သင်တန်းကို စတက်သင်လဲဆိုရင်တော့ ဖြစ်နိုင်ရင် C++ လောက်ကို တက်သင့်ပါတယ်။ (C++ သင်တန်းက စျေးအပေါဆုံးနဲ့ အခြေခံအကျဆုံးဖြစ်မယ် ထင်လို့ပါ)
    ၂။ပြီးတော့ အဲလို java,c++ တို့ကဘယ်နှစ်မျိုးလောက်ရှိတာလဲ..
    programming platform မှာ အဓိက ၃ ပိုင်းရှိတယ်ဗျာ။
    ၁ - microsoft လိုင်း(C#.NET, VB.NET, MS SQL)
    ၂ - opensource လိုင်း(PHP,MySQL)
    ၃ - java လိုင်း(java, oracle)
    ဒီ ၃ ခုလုံးကို တက်ရမယ်လို့ ပြောတာ မဟုတ်ဘူးနော်။ တက်ရင်တော့ ကောင်းတာပေါ့ဗျာ။ ဒါပေမယ့် ၁ လိုင်းကို သေသေချာချာ တက်ကျွမ်းအောင် လုပ်ပါ။
    ၃။အခုမှအခြေခံကိုလေ့လာမယ်ဆို ဘယ်ကစလေ့လာရမှာလဲ
    ဘာကိုလေ့လာသင့်ပါသလဲ
    ပထမဆုံး C++ ကိုလေ့လာပါ၊ ပြီးရင် C# ကိုလေ့လာပါ။ အဲ့ဒါကို သေချာတက်ပြီ ဆိုတော့မှ ကျန်တာကို လက်လှမ်းပါ လို့ အကြံပေးချင်ပါတယ်ခင်ဗျာ
  • edited October 2009 Registered Users
    Basic C# အပိုင်းက ပြီးသွားပြီဗျ။ ဒါကြောင့် ဆက်မရေးဖြစ်တော့တာ။ web form အပိုင်းကိုတော့ လော့လောဆယ် ကျွန်တော် ဘလော့မှာ တင်နေတယ်။ အချိန်ရရင်တော့ MZ မှာပါ တင်ပေးပါ့မယ်။ အခု ကျွန်တော် ရုံးမှာ အလုပ်တွေတော်တော် ရှုပ်နေလို့ပါ
  • edited October 2009 Registered Users
    sevenlamp wrote: »
    Basic C# အပိုင်းက ပြီးသွားပြီဗျ။ ဒါကြောင့် ဆက်မရေးဖြစ်တော့တာ။ web form အပိုင်းကိုတော့ လော့လောဆယ် ကျွန်တော် ဘလော့မှာ တင်နေတယ်။ အချိန်ရရင်တော့ MZ မှာပါ တင်ပေးပါ့မယ်။ အခု ကျွန်တော် ရုံးမှာ အလုပ်တွေတော်တော် ရှုပ်နေလို့ပါ


    ဟုတ်ကဲ့အစ်ကိုရေ အစ်ကိုအားတဲ့အချိန်ကျရင် ဆက်ပြ်းတော့ web form နဲ့ပတ်သက်ပြိးတော့တင်ပေးပါအုံးလို့ တောင်ဆိုပါရစေ...ညီမလည်းဆက်ပြိးလေ့လာသွားချင်လို့ပါအစ်ကို ကူညီပါအုံး:6::6::6:
  • edited October 2009 Registered Users
    Bro sevenlamp,

    Thanks for your lecture. And, we are waiting your new posts.
    Thanks.

    azure :)
  • emoemo
    edited October 2009 Registered Users
    pdf ထုတ်လိုက်ပါလားဗျာ အလွယ်တကူဒေါင်းလို့ရအောင် :D
  • edited November 2009 Registered Users
    မသပ်မရပ်တော့ ဖြစ်နေတယ်..
    အကြမ်းအားဖြင့်တော့ စုစုစည်းစည်း ဖြစ်မယ်လို့ ထင်ပါတယ်ခင်ဗျာ။
    http://www.mediafire.com/?nnzm4nehmyc
    
    or
    http://ifile.it/tdg2y06
    
Sign In or Register to comment.