72
history of C# အရင္ဆံုး C# ဆိုတာ ဘယ္လိုျဖစ္ေပၚလာလ စေျပာရေအာင္။ ကြ ၽန္ေတာ္သိတာကို ေျပာမွာေနာ္။ အားလံုးမွန္ခင္မွလည္း မွန္လိမ့္မယ္။ က … စျပီ….။ C# ဆိုတာ Microsoft က ထုတ္လိုက္တ ႔ programming language တစ္ခုေပါ့။ C# ျဖစ္ေပၚလာရတ ႔ history ကို အရင္ ေျပာၾကည့္မယ္ဗာ။ programming language ေတြ အမားၾကီး ရွိတ ႔ အထ မွာ ေတာ္ေတာ္မားမား စလုပ္ဖူးတာက C , C++ ထင္ပါတယ္။ C န ႔ ေရးရင္ ကြ ၽန္ေတာ္တိ႔ Graphic User Interface ေတြ ေရးရတာ အဆင္မေျပဘူးဗ။ နည္းနည္းပင္ပန္းတယ္။ ဒါန ႔ ပိုလြ ယ္တ ႔ language ေတြ ရွာလာတ ႔ အခါ Microsoft ကထုတ္တ႔ Visual Basic(VB) ကိုသံုးျဖစ္လာၾကတယ္။ VBက microsoft က ထုတ္တ ႔ Visual Studio လိ႔ေခၚတ programming language အစုအေ၀းၾကီးထ က Language တစ္ခုေပါ့ဗာ။ အ ့ဒီ Visual Studio ထ မွာ VB, VC++, Visual Foxpro, စသည္ျဖင့္ဗာ ေရြ းခယ္လိ႔ ရတ ႔ language ေတြ ပါပါတယ္။ VB ရ ့ အားသာခက္က Design အပိုင္းမွာ ေတာ္ေတာ္ေလးကို လြ ယ္တာပါပ ဒါေပမယ့္ အားနည္းခက္ကေတာ့ Object-Oriented Technology ကို သံုးလိ႔ မရဘူး။ OOP မဟုတ္ဘူးေပါ့ဗာ။ ဒီေတာ့ တကယ့္ Enterprise Application ၾကီးေတြ ေရးလိ႔ အဆင္မေျပဘူးလို႔ ေျပာၾကတယ္။ VC++ န ႔ ေရးဖိ႔ကလည္း ေတာ္ေတာ္ေလးကို ခက္တယ္လိပာၾကတယ္ဗ။ (ကြ ၽန္ေတာ္ေတာ့ မေရးဖူးပါ)။ ဒါေၾကာင့္ ေနာက္ပိုင္းမွာ programmer ေတြ က Java လိုင္းကို ေျပာင္းၾကတယ္။ ဒီေတာ့ Microsoft က java ကို fightဖိ႔ အၾကံထုတ္ရျပီေပါ့။ တျခားprogramming language ေတြ ့ အားသာခက္ေတြ ကို ၅ႏွစ္ေလာက္ေလ့လာျပီးမွ ၂၀၀၁၊၂၀၀၂ မွာ Visual Studio .NET ဆိုတာၾကီးကို ထုတ္လိုက္တယ္ဗ။ အ ့ဒီ Visual Studio .NET ထ မွာ နဂို VS ေတြ က ပါေနၾကျဖစ္တ ႔ VB, VC++ စတာေတြ အျပင္ Visual J# ဆိုတာန ႔ Visual C# ဆိုတ ႔ language အသစ္ ၂ ခုကိမိတ္ဆက္ေပးလိုက္တယ္ဗ။ java သမားေတြ အတြ က္ J# န ႔ C သမားေတြ အတြ က္ C# ဆိုပါေတာ့ဗာ။ အ ့ဒီ language ၂ ခုမွာ C# ကေတာ့ တာ္ေတာ္ေလးကို ေအာင္ျမင္သားတယ္။(ေပါက္သားတယ္ေပါ့ဗာ)။ Microsoft ကလည္း C#ကို ေတာ္ေတာ္ညႊန္းတယ္ဗ။ တျခားlanguage ေတြ အားလံ ုးရ ့ အားသာခက္ေတြ ကို ယူထားတ ႔ language ဆိုပ ဗ။ VB လိုမိး design ကို အလြ ယ္တကူေရးနိုင္တယ္။ Java လိုမိး OO ရ ့ feature ေတြ ကို သံုးနိုင္တယ္။(java ထက္ေတာင္မွ OO ပိုစစ္ေသးတယ္ဆိုပ ဗ)(ဥပမာဗာ java မွာဆိုရင္ data type တြ က keyword အဆင္မွာပ ရွိတယ္၊ C# မွာေတာ့ datatype ေတြ ကိုယ္တိုင္က classေတြ အျဖစ္ရွိတယ္ဗာ၊ class မဟုတ္တာဆိုလိoperator ေတြ ပ ကန္ေတာ့တယ္တ ႔)။ က ဒါကေတာ့ C# language ေမြ းဖြ ားလာပံုေပါ့ဗာ။ .NET Framework C# language စျပီးပါလာတ ႔ Visual Studio .NET 2002 မွာပ Microsoft က .NET Framework ဆိုတာၾကီးကိုပါ မိတ္ဆက္ေပးခ ႔တယ္ဗ။ ့ဒီ .NET Frameworkၾကီးထ မွာ အဓိကကေတာ့ အပိုင္း ၂ပိုင္းပါတယ္ဗ။ Common Language Runtime (CLR) န ႔ Framework Class Library(FCL) ဆိုျပီးေတာ့။ CLR က ကြ ၽန္ေတာ္တိ႔ .NET Platform မွာ ေရးတ ႔ ဘယ္language codeကိုမဆို Microsoft Intermediate Language အျဖစ္ေျပာင္းေပးျပီး Run လိ႔ ရေအာင္လုပ္ေပးတယ္ေပါ့ဗာ။ FCL ကေတာ့ predefined class library အစုအေ၀းၾကီးလိ႔ပ နားလည္ထားတယ္ဗ။ .NET

history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Embed Size (px)

Citation preview

Page 1: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

history of C#

အရငဆး C# ဆတာ ဘယလျဖစေပၚလာလ စေျပာရေအာင။ ကြၽနေတာသတာက ေျပာမာေနာ။ အားလးမနခငမလညး မနလမမယ။

က… စျပ….။

C# ဆတာ Microsoft က ထတလကတ႔ programming language တစခေပါ။ C# ျဖစေပၚလာရတ႔ history က အရင ေျပာၾကညမယဗာ။

programming language ေတြ အမားၾကး ရတ႔ အထမာ ေတာေတာမားမား စလပဖးတာက C , C++ ထငပါတယ။ C န႔ ေရးရင

ကြၽနေတာတ႔ Graphic User Interface ေတြ ေရးရတာ အဆငမေျပဘးဗ။ နညးနညးပငပနးတယ။ ဒါန႔ ပလြယတ႔ language ေတြ

ရာလာတ႔ အခါ Microsoft ကထတတ႔ Visual Basic(VB) ကသးျဖစလာၾကတယ။ VBက microsoft က ထတတ႔ Visual Studio လ႔ေခၚတ႔

programming language အစအေ၀းၾကးထက Language တစခေပါဗာ။ အဒ Visual Studio ထမာ VB, VC++, Visual Foxpro,

စသညျဖငဗာ ေရြးခယလ႔ ရတ႔ language ေတြပါပါတယ။ VB ရ အားသာခကက Design အပငးမာ ေတာေတာေလးက လြယတာပါပ။

ဒါေပမယ အားနညးခကကေတာ Object-Oriented Technology က သးလ႔ မရဘး။ OOP မဟတဘးေပါဗာ။ ဒေတာ တကယ

Enterprise Application ၾကးေတြ ေရးလ႔ အဆငမေျပဘးလ႔ ေျပာၾကတယ။ VC++ န႔ ေရးဖ႔ကလညး ေတာေတာေလးက ခကတယလ႔

ေျပာၾကတယဗ။ (ကြၽနေတာေတာ မေရးဖးပါ)။ ဒါေၾကာင ေနာကပငးမာ programmer ေတြက Java လငးက ေျပာငးၾကတယ။ ဒေတာ

Microsoft က java က fightဖ႔ အၾကထတရျပေပါ။ တျခားprogramming language ေတြရ အားသာခကေတြက

၅ႏစေလာကေလလာျပးမ ၂၀၀၁၊၂၀၀၂ မာ Visual Studio .NET ဆတာၾကးက ထတလကတယဗ။ အဒ Visual Studio .NET ထမာ နဂ

VS ေတြထက ပါေနၾကျဖစတ႔ VB, VC++ စတာေတြ အျပင Visual J# ဆတာန႔ Visual C# ဆတ႔ language အသစ ၂ ခက

မတဆကေပးလကတယဗ။ java သမားေတြအတြက J# န႔ C သမားေတြ အတြက C# ဆပါေတာဗာ။ အဒ language ၂ ခမာ C# ကေတာ

ေတာေတာေလးက ေအာငျမငသြားတယ။(ေပါကသြားတယေပါဗာ)။ Microsoft ကလညး C#က ေတာေတာညႊနးတယဗ။

တျခားlanguage ေတြ အားလးရ အားသာခကေတြက ယထားတ႔ language ဆပဗ။ VB လမး design က အလြယတကေရးနငတယ။

Java လမး OO ရ feature ေတြက သးနငတယ။(java ထကေတာငမ OO ပစစေသးတယဆပဗ)(ဥပမာဗာ java မာဆရင data type

ေတြက keyword အဆငမာပ ရတယ၊ C# မာေတာ datatype ေတြကယတငက classေတြ အျဖစရတယဗာ၊ class မဟတတာဆလ႔

operator ေတြပ ကနေတာတယတ႔)။

က ဒါကေတာ C# language ေမြးဖြားလာပေပါဗာ။

.NET Framework

C# language စျပးပါလာတ႔ Visual Studio .NET 2002 မာပ Microsoft က .NET Framework ဆတာၾကးကပါ မတဆကေပးခ႔တယဗ။

အဒ .NET Frameworkၾကးထမာ အဓကကေတာ အပငး ၂ပငးပါတယဗ။ Common Language Runtime (CLR) န႔ Framework Class

Library(FCL) ဆျပးေတာ။

CLR က ကြၽနေတာတ႔ .NET Platform မာ ေရးတ႔ ဘယlanguage codeကမဆ Microsoft Intermediate Language အျဖစေျပာငးေပးျပး

Run လ႔ ရေအာငလပေပးတယေပါဗာ။ FCL ကေတာ predefined class library အစအေ၀းၾကးလ႔ပ နားလညထားတယဗ။ .NET

Page 2: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Framework အလပလပပ ေလးၾကညၾကညရေအာငဗာ။

အရငဆးကြၽနေတာတ႔ Programတစခေရးလကတယဗာ။ အဒါက source code လ႔ ေခၚတယ။ source code က ကြၽနေတာတ႔

ကြနပတာၾကးက နားမလညပါဘး။ ဒေတာ ကြနပတာနားလညမယ machine code အျဖစက ေျပာငးဖ႔လပါတယ။ ဒအလပက .NET

Framework အတြငးမာ ရတ႔ သကဆငရာ Language အလက compiler ေတြက ဘာသာျပနအလပလပပါတယ။ ဒေနရာမာ

သထားရမာက .NET Framework ကသးျပးေရးထားတ႔ code ေတြက compile လပရင machine code တနးမထြကပါဘး။ .NET

Framework ကပနားလညနငတ႔ MSIL လ႔ေခၚတ႔ Microsoft Intermediate Language Code အျဖစပထြကပါတယ။ အဒ code

ကမတဖန CLR ထမာ ရတ႔ Jet In-time Compilier (JIT) ေလးက ထပျပး Compile လပပါတယ။ ဒလလပလကမ Operating System

ကနားလညတ႔ code အျဖစကေရာကရပါတယ။ ဆလတာကေတာဗာ .NET Framework မရရင .NET program ေတြ run

လေတာငမရဘးေပါ။ ေနာကပငး Microsoft က ထတတ႔ OS ေတြမာ .NET Framework က build-in ထညေပးပါတယ။ ဒါမမဟတလညး

internet ကေန framework က အလကားေပးပါတယ။ Visual Studio .NET ၾကးတစခလး ၀ယမယဆရငေတာ

ေစးေတာေတာၾကးတယၾကားတယဗ။ (ကြၽနေတာတ႔ ျမနမာနငငမာေတာ ေပါပါတယ :-)) FCL အေၾကာငးေတာင ေမ႔ေတာမလ႔။ ဒလဗ

Framework Class Library ဆတာ ကြၽနေတာတ႔ program ထမာ user monitor ေပၚ 'hello' ဆျပး ရကထတျပခငတယဆပါေတာ။

အဒါက C န႔ ေရးရင

printf("hello");

ဆျပး ရကတယဗာ။ အဒကဒထမာ ေရးလကတ႔ printf ဆတ႔ဟာေလးက function လ႔ေခၚတယဗ။ အဒ function က

ကြၽနေတာတ႔ကယတငေရးတာမဟတဘးဗာ၊ library ထကေနေခၚသးတာေပါ။ အဒလ predefined function ေတြေရးျပး သမးထားတ႔

class အစအေ၀းၾကးက Framework Class Library လ႔ ေခၚေၾကာငးပါဗား။

က ဒဇယားေလးကေတာ .NET Framework version history ပါဗာ။

Version .... Release ... Visual Studio ................... Default in Window

1.0 ............ 2002 ....... Visual Studio .NET .............................-

1.1 ............ 2003 ....... Visual Studio .NET 2003 .......... Window Server 2003

2.0 ............ 2005 ....... Visual Studio 2005 ............................-

3.0 ............ 2006 ..................- .............................. Window Vista, Window Server 2008

3.5 ............ 2007 ....... Visual Studio 2008 .................. Window 7, Window Server 2008 RC2

4.0 Beta1 .... 2009 ....... Visual Studio 2010

Page 3: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

က အခကြၽနေတာတ႔ C# programming language န႔ program တစခေလာက စေရးၾကရေအာငဗာ။ programming language တငးရ

first time program ေလး helloworld န႔ပ စလကရေအာင။ C# program စေရးဖ႔အတြက ခငဗားတ႔ စကမာ .NET Framework install

လပထားျပးသားျဖစဖ႔ေတာ လတယဗ။ Visual Studio install လပထားျပးသားဆရင framework ထပသြငးစရာမလေတာဘးေနာ။

မသြငးရေသးဘးဆရငေတာ ဒမာ

http://www.microsoft.com/downloads/d...displaylang=en

သြားျပး download လပျပးသြငးလကဗာ။ framework သြငးျပးရငေတာ ကြၽနေတာတ႔ program စေရးလ႔ ရျပ။ java လပဗ C# program

ကလညး Visual Studio IDE မသးပေရးလ႔ ရတယ။ အခ အဒလေရးၾကရေအာင။ program ေရးဖ႔အတြက Text Editor

တစခေတာလတယဗ။ ခငဗားတ႔စကမာ Notepad ေတာ ရျပးသား ျဖစမာပါ။ က Notepad ဖြငဗာ။

window key + R ႏပျပး Run Box ကေခၚလကဗာ ျပးရင အဒ Box ထမာ notepad လ႔သာရကထညလက၊ ဒါဆ Notepad

ပြငလာလမမယ။ ဟတျပ… program စေရးရေအာင။ ဒအတငးေရးလကဗာ ျပးမ ျပနရငးမယ။

class Hello

{

static void Main()

{

System.Console.Write("Hello World");

}

}

ေရးျပးျပေနာ… အေက ျပနရငးရေအာင။ C တ႔ java တ႔လပ C# program ေတြကလညး Main function ကေနစျပး အလပလပတယဗ။

ဒါေပမယ C# မာေတာ Main က M အၾကးန႔ ေရးရတယေနာ။ ျပးေတာ static ဆတ႔ keyword လညးထညရတယ။ အေက ကြၽနေတာတ႔

ဒအတငးေရးလကျပ static void Main() ေပါ။

အဒ Main function ရ scope ကသကမတဖ႔ { န႔ } က သးတယ။ ဒါလညး C တ႔ java တ႔န႔ တတပ။ အဒ scope ထမာမ ကြၽနေတာတ႔

computer က ခငးေစခငတ႔ statement ေတြက ေရးရမယ။ statement တစေၾကာငး ျပးျပဆတငးမာ semicomar( ပတဖ႔လညး

မေမ႔န႔ဥးေနာ။

monitor မာ စာရကခငးဖ႔ အတြက C# မာ Write or WriteLine function က သးရတယဗ။ အဒ Write function ကလညး

ဒတငးေခၚခြငမရဘးဗ၊ function ရေနတ႔ class name န႔ တဆငေခၚရတယ။ Write function က Console class ထမာ ရတယေလ၊

ဒါေၾကာင ေရးတ႔အခါ Console.Write လ႔ေရးမမနမယ။ ဟတျပ ဒါဆ ေရမာ ဘာလ႔ System ဆတာၾကးပါရတာလ။ ဒါက ဒလရတယဗ

အဒ System ဆတာက Namespace လ႔ ေခၚတယ။ Namespace ဆတာ class ေတြ စထားတ႔ class အစအေ၀းၾကး class library

ေပါဗာ။ Console class က System namespace ထမာ ရတယ။ ဒါေၾကာင ကြၽနေတာတ႔က System.Console.Write လ႔ ေရးရတာဗ။

Page 4: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒလမး class name ရ ေရ႕မာ ထညမေရးခငဘး ဆလညး ေနာကတစနညးရေသးတယ။ class မေဆာကခငမာ library file အေနန႔

ၾကျပး ေၾကျငာေပးထားလ႔ ရတယ။ C မာ #include၊ java မာ import ဆျပး ေၾကျငာသလ C# မာလညး using ဆျပး ေၾကျငာရတယ။

ဒလမးဗာ…

using System;

class Hello

{

static void Main()

{

Console.Write("Hello World");

}

}

ခလ႔ class အေပၚမာ System namespace က using လပလကရင။ ဒ class အတြငးမာ အဒ System namespace ထက class ေတြက

စတၾကကေခၚသးလ႔ ရျပ။ ေနာကထပထပေရးေနစရာ မလေတာဘး။ မဟတရင Console.Write တစခါရကခငတငး ေရ႕မာ System

ဆတာၾကးက ျပနျပနထညေပးေနရလမမယ။

က Main function ေရးျပေတာ ျပးေရာလားဆေတာ မျပးေသးဘးဗ။ C# က OOP language ေလ။ ဒေတာ ဒfunction ကလညး class

တစခခအထမာပ ထညေရးခြငရတယဗ။ function ၾကးပ ဒတငးေရးလ႔ မရဘး။ ဒါေၾကာင ကြၽနေတာက Hello ဆတ႔ class ထမာ

ထညေရးလကတာ။ class name က ကယၾကကတာေပးခြငရပါတယ။ java မာလမး file name န႔ class name န႔ တစရာ မလဘး။

ဒေလာကဆရင အေပၚက program ထမာ ေရးထားတ႔ coding ေတြက နားလညျပထငတယေနာ။ အဓကနားလညေစခငတာကေတာ

ဘာလပခငလ႔ ဘယကဒကေရးရတယ ဆတာက နားလညေစခငတာ။ က ကြၽနေတာတ႔ ေရးလ႔ ျပးျပဆေတာ ဒ source code ေတြက

သမးရမယ။ Ctrl + S ႏပျပး C: Drive ေအာကမာ ခငဗားတ႔ ၾကကတ႔ နာမညန႔ သမးဗာ၊ အ file extension ကေတာ (.cs)

ျဖစရမယေနာ။ ဥပမာ ကြၽနေတာက filename က Test1 လ႔ ေပးခငတယဆရင Test1.cs ဆျပးေပးရမယ။ ရတယေနာ… အေက

အခကြၽနေတာတ႔ ဒ C# source file ေလးက compile လပျပး run ၾကညရေအာင။ compile လပဖ႔ အတြက command prompt

ထသြားဖ႔လတယ။ က႔ Run Box ကေခၚျပး cmd လ႔ ရကလကဗာ ဒါဆ command prompt ေပၚလာမယ။ command prompt ထမာ

လကရ cursor location က C: ေအာကက document and setting ေအာကက login ၀ငထားတ႔ username ေအာကက

ေရာကေနလမမယထငတယ။ ဒါဆအဆငမေျပဘး ကြၽနေတာတ႔ Root Directory ေအာကက ျပနသြားရေအာင။ CD\ ရကျပး Enter

ေခါကလက။ ဒါဆ C: ေအာကက ျပနေရာကသြားျပ။ အဒမာမ ကြၽနေတာက .NET Framework သြငးထားတ႔ location က ရာရေအာင။

ဒေနရာမာ ကြၽနေတာ တစခေျပာဖ႔ကနသြားတယ။ အေပၚပစမာ ေျပာခ႔တ႔ အတငး ကြၽနေတာတ႔ ေရးထားတ႔ source file ေတြက

သကဆငရာ language ရ compilier န႔ compile လပရတယ။ C# အတြကေတာ C Sharp Compiler (csc.exe) ေပါဗာ။ ဒါေၾကာင

csc.exe file ေလးက ရာမယဗာ။ က command prompt ထမာ ဒလေလးရကလကပါဥး။

Page 5: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

dir csc.exe /s

ခဏေတာ ေစာငရမယထငတယ။ ရာလေတြ႔ျပဆရင အဒ compiler ေလးရတ႔ ေနရာက path ေပးရမယဗ။ ခကတာက ကြၽနေတာက path

ေပးတာက ေမ႔ေနျပ။ ဒါေၾကာင အဒ compiler ရတ႔ location ကပ CD command သးျပး သြားလကမယဗာ။ ေၾသာဒါန႔ ခငဗားစကမာ

framework version အမားၾကးရေနတာလ ျဖစနငတယေနာ။ ၾကကတ႔ version ေအာကက ၀ငလကဗာ။ က compile လပရေအာင။

csc.exe C:\Test1.cs

ခလ compile လပလကေတာ compiler က exe file ထတေပးတယဗ။ ရာရင ရာၾကညလကဥး။

ေတြ႔တယမလားဗ ကြၽနေတာတ႔ program ရ executable file ေလး။ အဒ file ေလးက run ရင ရျပေပါ။ တခေတာ မတထားဥးေနာ၊ ဒ

exe file က .NET Framework ရမ run လ႔ ရမာေနာ။ အခ တခါတညး run ၾကညရေအာငဗာ။ exe file ဆေတာ ဒတငး filename

ရကလကရပါပ။

က႔ ဒါဆရင ခငဗားတ႔ရ ပထမဆး C# program ရ output က ေတြ႔ရျပေပါ။

***********

ကြၽနေတာ video training ေလးပါ တငေပးလကတယ။ ဒမာ ယဗာ။

http://ifile.it/38lwqa5

Compile လပရင program မာမားနငတာေလးေတြလညး ရတယဗ။

၁ - using, class, static, void အဒါေတြက စာလး အေသးန႔ေရးရမယ။

၂ - System, Console, Write, Main အဒါေတြကေတာ အစစာလးက အၾကးန႔ ေရးရမယ။

၃ - write function အဆးမာ ( ; ) ထညရမယ။

၄ - Hello World ဆတ႔ စာသားက " န႔ " ထထညေရးရမယ။

ဒေလာကဆ အားလး run လ႔ ရၾကမာပါ။ စမးၾကညျပး တစခချပနေျပာၾကဗာ။

Page 6: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

data types of C#

C# data type ေတြ အေၾကာငးဆကေျပာရေအာငဗာ။ Data type ဆတာဘာလ။ ကြၽနေတာတ႔ user ေတြဆကေန data

အခကအလကေတြက program ထမာ သမးထားဖ႔အတြက ကြၽနေတာတ႔ computer ရ memory ေပၚမာ ေနရာသြားယေပးရတယဗ။

အဒလ ေနရာယတာက Variable Declaration လပတယလ႔ ေျပာတာေပါ။ Variable declaration လပတ႔ အခါ memory ေပၚမာ

ကယသမးခငတ႔ data ရ အမးအစား(data type)က ေၾကျငာေပးရတယ။ Number သမးမာလား၊ ဒါမမဟတ စာသားေတြသမးမာလား

စသညျဖငေပါ။

C# မာ အဓက data type ၂ မးရတယဗ။ Value Type န႔ Reference Type ဆျပးေခၚတယဗာ။ Value Type ဆတာကေတာ memory

ေပၚက ကြၽနေတာတ႔ ေၾကျငာထားတ႔ ေနရာမာ value ကတကရကသမးထားတာဗာ။ Reference Type ဆရငေတာ value က

မသမးထားပ အဒ value ရေနတ႔ memory address ကပ ကြၽနေတာတ႔ရ variable ထမာ သမးထားတာက ဆလတာေပါ။

နမနာက ဒလဗာ…

int num = 3;

number value data တခသမးဖ႔အတြက num ဆတ႔ variable တစခက memory ေပၚမာ ေနရာယလကပါတယ။ ျပး တခါတညး အဒ

ေနရာမာ 3 ဆတ႔ value တစခက သမးလကပါတယ။ ေၾကျငာထားတ႔ ေနရာထမာ value သမးသြားတ႔ အတြက int ဟာ value type

ျဖစပါတယ

string st = “abc”;

ဒလပါပ abc ဆတ႔ စာသားက သမးဖ႔အတြက st ဆတ႔ variable က ေၾကျငာလကပါတယ။ ဒါေပမယ st ထကထညလကတ႔ value ျဖစတ႔

abc ဟာ st ထမာ မရပါဘး။ memory ရ တျခားတေနရာမာ ရသြားပါတယ။ အဒ abc ေရာကသြားတ႔ ေနရာရ address ကသာလင st

ထကေရာကသြားပါတယ။ ဒါေၾကာင string ဟာဆရငျဖင reference type ထမာ ပါ၀ငပါတယ။

ဒါဆရင value type န႔ reference type က ခြျပး နားလညမယထငပါတယ။ ဟတျပ ဒါဆရင value type မာ ဘာေတြပါလ

ဆကၾကညရေအာင။

Page 7: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

value type ထမာ integral type ေတြ၊

Type .................................... Range ......................................... Size

sbyte ................................ -128 to 127 ...................................... Signed 8-bit integer

byte ..................................... 0 to 255 ........................................Unsigned 8-bit integer

char ..................................... U+0000 to U+ffff ........................... Unicode 16-bit character

short .....................................-32,768 to 32,767 ........................ Signed 16-bit integer

ushort .................................0 to 65,535 ................................... Unsigned 16-bit integer

int ........................-2,147,483,648 to 2,147,483,647 .................... Signed 32-bit integer

uint .............................0 to 4,294,967,295 .................................. Unsigned 32-bit integer

long ......... -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807..... Signed 64-bit integer

ulong ..............0 to 18,446,744,073,709,551,615 ..............................Unsigned 64-bit integer

floating point typeေတြ၊

Type .........................Approximate range ..............Precision

float ..................±1.5e−45 to ±3.4e38 ............................7 digits

double ...............±5.0e−324 to ±1.7e308 ....................15-16 digits

decimal type၊

Type .........................Approximate Range .................Precision

decimal ................±1.0 × 10−28 to ±7.9 × 1028 ..................28-29 significant digits

boolean data type၊ enumeration data type န႔ structure data type ေတြပါ၀ငပါတယ။

reference type ထမာေတာ string type၊ object type၊ array data type၊ class data type၊ interface န႔ delegate type

ေတြပါ၀ငပါတယ။

variable declaration အပငးမာ ကြၽနေတာတ႔ သဖ႔လတာတခရတယဗ။ ကြၽနေတာတ႔ variable name ေတြေၾကျငာတ႔ေနရာမာ C#

keywords ေတြန႔ သြားျပးတလ႔မရဘးဗ။ Keywords ဆတာကေတာဗာ compiler က နားလညျပးသား စကားလးေတြေပါ။ သတ႔က

reserved words လ႔လေခၚေသးတယဗ။

Page 8: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

abstract event new struct as explicit null switch base extern object

this bool false operator throw break finally out true byte fixed

override try case float params typeof catch for private uint char

foreach protected ulong checked goto public unchecked class if

readonly unsafe const implicit ref ushort continue in return using

decimal int sbyte virtual default interface sealed volatile delegate

internal short void do is sizeof while double lock stackalloc else

long static enum namespace string

ဒဇယားထက Keyword ေတာေတာမားမားက ကြၽနေတာတ႔ သျပးသားျဖစမာပါ။ ဒါန႔ ခငဗားတ႔ စကမာ Visual Studio 2008

ျဖစျဖစတငထားဥးဗာ။ ေနာကprogram ေတြက VS န႔ run ရေအာင။

Data Type ေတြန႔ ပတသကျပး ေနာကထပသထားစရာေလးေတြ ေျပာခငေသးတယဗ။

ကြၽနေတာတ႔ C# ထမာ 3 လ႔ ရကလကရင အဒ 3 ရ datatype က default အေနန႔ integer type ဗ။ ကြၽနေတာက long

အျဖစေရးခငတယဆရင 3L လ႔ ေရးရမယ။ ကနတာေတြက ေအာကမာၾကညလကပါဥး။

3 => int

3L => long

3.0 or 3.0D => double

3.0F => float

3.0M => decimal

'3' => char

"3" => string

အေပၚမာ ျပထားတာကၾကညမယဆရင တကယ value က 3 ျဖစေပမယ သ႔က data type အမးမးမာ ေရးတ႔ပစေလးပါ။

အဒထမာ string type ကလြျပး ကနတ႔ type ေတြက numeric type ေတြပါ။ ဆလတာက သတ႔က ေပါငးႏႈတေျမာကစား လပလ႔ရတယ။

string type ကေတာ မရဘး။ ဥပမာ

string v1 = "3";

string v2 = "4";

Console.Write(v1+v2);

Page 9: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဆရင output က34 ဆျပး ျပေနလမမယဗာ။ ဆလတာကေတာဗာ 3 န႔ 4 က number အေနန႔ မေပါငးပ string အေနန႔

ေပါငးသြားတာေပါဗာ။ ဒေတာ ကြၽနေတာတ႔က string type အေနန႔ ရေနတ႔ value ေတြက ေပါငးခငတ႔ အခါမာ numeric type အျဖစက

ေျပာငးဖ႔လလာျပေပါ။ ဒလမး datatype တစခကေန တစခက ေျပာငးဖ႔အတြကဆရင Data Type Conversation အေၾကာငးက

သဖ႔လလာပါျပ။ အဒလ ေျပာငးတ႔ ေနရာမာ numeric type အခငးခငး ေျပာငးတာန႔ numeric type န႔ string type ေျပာငးတာ ဆျပး

ခြေျပာပါမယ။

numeric type အခငးခငးေျပာငးမယဆရင type conversation မာ ၂ မးရပါတယ။ အလြယမတမယဆရငေတာ ငယတ႔ type ကေန

ၾကးတ႔ type က ေျပာငးတာ (Widening) န႔ ၾကးတ႔ type ကေန ငယတ႔ type က ေျပာငးတာ (Narrowing) ဆျပး ရတယဗ။ ဥပမာ int

data type ကေန long က ေျပာငးခငရင widening , long ကေန int က ေျပာငးခငရငေတာ narrowing ေပါ။

int int_var1 = 123;

long long_var1 = int_var1; // implicit conversation (widening)

long long_var2 = (long) int_var1; // explicit conversation (widening)

int int_var2 = (int) long_var1; // explicit conversation (narrowing)

*** narrowing မာ implicit မရပါဘး ***

object data type ကေန numeric type ကေျပာငးမယဆရင....

int i = 123;

object o = i; // implicit boxing

object o = (object) i; // explicit boxing

int i = (int) o; // unboxing

string type ကေနေျပာငးခငတယဆရငေတာ အဒလ type casts လပလ႔ မရေတာပါဘး။ ဒါဆရင ဘယလေျပာငးမလ? Convert

Function ေတြကသးျပးေတာ ေျပာငးရပါမယ။ FCL ထက Convert class ထမာ data type တစခကေန တစခက ေျပာငးဖ႔ function

ေတြရပါတယ။ သကဆငရာ Data type class ေတြထမာလ ရပါတယ။ အဒ function ေတြန႔ ေျပာငးရပါမယ။

ေအာကမာ နမနာၾကညပါ

Page 10: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

string st = "123";

int i = Convert.ToInt32(st);

int i = Int32.Parse(st);

string st = Convert.ToString(i);

string st = i.ToString();

အခ ကြၽနေတာတ႔ program ေလးတခေလာက ေရးၾကညရေအာင။ ကြၽနေတာက ဘာလပခငလဆရင user ဆကေန number value

တစခေတာငးမယဗာ။ ျပးေတာ အဒnumber ရ square တနဖးက ျပနျပး ရကထတခငတယ။ ဟတျပေနာ ဒါဆ ေရးၾကညရေအာင…

အရငဆး C# မာ Main function ကေန စေရးရမယဆေတာ…

Code:

static void Main()

{

}

ဆျပး ေရးလကမယဗာ။ ျပးရင user ဆကေန ေတာငးမယ number က memory ေပၚမာ ခဏသမးထားဖ႔ အတြက ေနရာယ(variable

declare) ရမယ။ ဒါေၾကာင Main function ရ အတြငးထမာ…

int num;

ဟတျပး ဒါဆရင integer တနဖးေတြ သမးဖ႔အတြက ေနရာေလးရျပး။ အခ user က တနဖးတစခထညေပးပါလ႔ ေျပာခငတယ။ user က

ေျပာတယဆတာက monitor မာ output ထတျပတာပေလ။ ဒါေၾကာင ဒလေလးေျပာလကမယ….

Console.Write("Enter a number : ");

ဒါဆရင user က number တစခရကထညေတမယ။ အဒ number က လကခဖ႔ အတြက C# console application မာ ReadLine()

function ကသးရမယ။ အဒ function ကလညး Console class ထမာရတယ။ ဒါေပမယ အဒ ReadLine function က user

ဘာရကထညထည string data type ပ return ျပနတယ။ ဒေတာ user က 3 ရကထညရင “3” ဆျပး string type ျဖစသြားမယ။

ဒါဆရင ကြၽနေတာတ႔ memory ေပၚမာေၾကျငာထားတ႔ integer variable ထက ဒတငးတနးျပး ထညလ႔မရေတာဘး။ string type ကေန

integer type က convert လပေပးရေတာမယ….

string temp = Console.ReadLine();

num = Convert.ToInt32(temp);

Page 11: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒလေရးလညး ရပါတယ။

num = Convert.ToInt32(Console.ReadLine());

က… ကြၽနေတာတ႔ရ num variable ထမာ user ထညလကတ႔ တနဖးေလး ေရာကသြားပါျပ။ အခ user က square result

ထတျပဖ႔ပကနပါေတာတယ…

Console.WriteLine(“Square of {0} is {1}”, num, num*num);

Result ထတျပလကတ႔ code ေလးက နညးနညးေလး ရငးျပပါမယ။ Write or WriteLine function အတြငးမာ parameter ၃ ခ

ကြၽနေတာေပးလကပါတယ။ ပထမဆးတစခ “Square of {0} is {1}” ဆတာမာ {} အတြငးထမာ ေရးတ႔ ဟာ၂ခကလြျပး

ကနတာေတြအားလးက ဒအတငးေပၚပါမယ။ အဒါက format string လ႔ ေခၚပါတယ။ ေနာကက Parameter ၂ ခကေတာ format string

ထမာ ထညေပးလကခငတ႔ value ေတြပါ။ num က index 0 ၊ num*num က index 1 ေနရာမာ ရပါတယ။ အဒ value ေတြက format

string ထမာ ျပနေခၚဖ႔ အတြက {} ကသးပါတယ။ index 0 ေနရာက value က ေခၚခငရင {0} လ႔ေခၚရပါမယ။ ဒအတငးပ index 1

ေနရာက ဟာကေခၚဖ႔အတြကေတာ {1} ေပါ။ ဒါဆရင နားလညမယထငတယေနာ။ အဒလ မေရးပ ေနာကတစမးလညး

ေရးလ႔ရပါေသးတယ…

Console.WriteLine(“Square of “+num+” is “+num*num);

အခ ေနာကဆးအေနန႔ user က program ပတဖ႔အတြက ဒလေလး ေရးေပးလကပါမယ…

Console.Write(“\npress enter to close…”);

Console.Read();

\n က ေနာကတစလငးဆငးဖ႔ အတြကသးျပး။ Console.Read() ကေတာ user enter ေခါကတာက ေစာငေနေပးပါတယ။

ဒ ပစာၦေလးထမာ ကြၽနေတာ Convert class န႔ Console class ၂ ခက သးထားပါတယ။

ဒါေၾကာင အေပၚဆးမာ ဒလေလးေရးေပးလကတယ….

using System;

Page 12: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

using System;

class Program

{

static void Main(string[] args)

{

string temp; int num;

Console.Write("Enter a number : ");

temp = Console.ReadLine();

num = Convert.ToInt32(temp);

Console.WriteLine("Square of {0} is {1}", num, num * num);

Console.Write("\npress enter to close...");

Console.Read();

}

}

Enter a number : 4

Square of 4 is 16

Press enter to close…

4 က user input ပါ။

ဒ program ေလးက ေရးဖ႔အတြက Visual Studio ထမာ File->New->Project->C# language->Console Application ကေရြးပါမယ။

ဒါဆရင class ေတြ Main function ေနရာေတြ IDE က auto လပေပးသြားလမမယ။ အဒ ထမာ ရကရပါပ။ ျပးလ႔ run မယဆရငေတာ F5

ပါ။ အေသးစတေျပာဖ႔လရင ျပနေျပာပါခငဗာ

ကြၽနေတာတ႔ Console Screen မာ output ထတျပမယဆရင၊ သးလ႔ရတ႔ function ၂ ရတယဗ။ Console.Write န႔ Console.WriteLine

ေပါ။ အဒ ၂ ခဘာကြာလဆရင Console.Write ကသးရင ကြၽနေတာတ႔ output ထတလကတ႔ စာေတြရ ေနာကဆးမာ cursor ေလး

မတတတ၊ မတတတန႔ ရေနတယ။ user ကေန စာဆကရကမယဆရင အဒေနရာေနာကဆးကေန ဆကျပး ေပၚလာပါလမမယ။

Console.WriteLine ကသးမယဆရငေတာ cursor ဟာ ေနာကဆးမာ ရမေနပ ေအာကတစလငးကဆငးသြားမာ ျဖစပါတယ။ ဒါေၾကာင

တစလငးျပး တစလငး user က output ထတျပမယဆရင Console.WriteLine ကသးေလရျပး၊ user ဆကေန input ေတာငးခငတ႔

အခါမးမာ Console.Write ကသးေလ႔ ရပါတယ။

Page 13: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒလပ user ဆကေန input ျပနလကခခငတယဆရငလညး Console.Read() န႔ Console.ReadLine() ဆျပး function ၂ ခရပါတယ။

Console.ReadLine() က user ရကထညတ႔ စာသားေတြအားလးက လကခေပးျပး string type အေနန႔ return ျပနပါတယ။

Console.Read() ကေတာ user ရကတ႔ ပထမဆးchar ရ ASCII Code က integer type အျဖစျပနထတေပးပါတယ။ Console.Read()

က user ဆကေန enter တစခကေခါကတာက ေစာငေနေပးဖ႔ အတြက သးေလ႔ ရပါတယ။

ဥပမာ။

using System;

class SayHello

{

static void Main()

{

string Name;

Console.Write("Enter your name : ");

Name = Console.ReadLine();

Console.WriteLine("Hello! " + Name);

Console.WriteLine("Welcome to MZ");

Console.WriteLine();

Console.Read();

}

}

Error handling in C#

မေန႔က Program ေလးန႔ပ ဆကေျပာရေအာငဗာ။ အဒprogram ေလးမာ user ဆကေန number value တစခေတာငးတယ။ square

တနဖးက output ထတျပတယ။ အေက။ ဒါက user ကေန သတမထားမပ number မဟတတ႔ တျခား character

ေတြထညလကတယဆပါေတာ… က program ဘာျဖစသြားမလ?

Page 14: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒပေလးထကလ ျဖစသြားမာေပါဗာ….

ဒါက error တကသြားတယလ႔ ေခၚမယထငတယ။ ဟတတယဟတ

က… အခ ကြၽနေတာေျပာခငတာက Error ေတြအေၾကာငးပါပဗာ။ ကြၽနေတာတ႔ program ေတြေရးတ႔အခါ error ဆတာေတြန႔က

မလြမေသြေတြ႔ၾကေနရမာပါပ။ အဓကကေတာ error အမးအစား ၃ မးရတယဗ။

1 – compile error ( grammar error, syntax error လလေခၚေသးတယဗ )

2 – logic error ( semantic error )

3 – run time error

1)Compile Error

Compile error ဘယအခနမာ ျဖစလညးဆေတာ ကြၽနေတာတ႔ ေရးလကတ႔ source code ေတြက compiler က နားမလညေတာဘး

ဆရင compile error ျဖစတာေပါ။ ဥပမာအားျဖင statement အဆးမာ semicolon ( ကနခ႔တာတ႔။ Main function က m အေသးန႔

ေရးတာတ႔ စသညျဖငေပါ။ compile error က အေတြ႔အမားဆးန႔ ေျဖရငးရအလြယဆး error အမးအစားျဖစတယဗ။

2)Logic Error

Logic error ဆတာကေတာ programmer ရ စဥးစားပမားလ႔ ျဖစေစ၊ careless ျဖစျပး မား ရကမလ႔ ျဖစေစ၊ program ရ output မာ

အေျဖမန မထြကေတာပ၊ wrong result ထြကလာတာမးက ဆလတာပါ။ ဥပမာ..

Console.WriteLine(“Square of {0} is {1}”, num, num*num);

လ႔ ေရးရမယေနရာမာ

Console.WriteLine(“Square of {0} is {1}”, num, num+num);

လ႔ ေရးလကမတယဆပါစ႔။ ဒါဆရင program က compile error တကမလား ? မတကဘးေနာ result ေတာျပမာပ။ ဒါေပမယ ျပတ႔

အေျဖက ကယလခငတ႔ အေျဖထြကမလား.. မထြကေတာဘးေလ။ ဟတတယမလား။ ဒါဆရင ဒ program မနတယလ႔ ေျပာလ႔ ရမလား။

မရပါဘး။ ဒလ error မးက logic error လ႔ ေခၚပါတယ။ logic error ေတြက ေျဖရငးဖ႔ အတြကေတာ ကြၽနေတာတ႔ program က line by

line Trace လကျပး error ကရာရပါမယ။

3)Runtime Error

Runtime error ကေတာ အေပၚဆးမာ ကြၽနေတာျပထားတ႔ ပထက error မးေပါ။ user fault ေၾကာငျဖစေစ၊ ကြနပတာရ

အမားေၾကာငျဖစေစ program မားသြားတာမးေပါ။ အျမတမးမားမလားဆေတာ user သာ အမနထညရင မမားဘး။ user

ကမားထညတာန႔ ကြၽနေတာတ႔ program လညး မားသြားမယ။ ဒါေပမယ တကယေကာငးမြနျပညစတ႔ program တစချဖစဖ႔အတြက ဒလ

error မးေတြကလညး မျဖစေအာင programmer က စဥးစားေပးနငရမယ။

Runtime error ေတြက ေျဖရငးဖ႔အတြကေတာ ကြၽနေတာတ႔ Error Handling (Exception Handling) Statement ကသးရပါမယ။

အားလး သျပးသားျဖစတ႔ try…..catch ကေျပာတာပါ။

Exception Handling

Page 15: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Runtime error ေတြက handle လပဖ႔အတြက error ျဖစနငတ႔ statement ေတြက try{ န႔ } ၾကားမာ ေရးရပါမယ။ ျပးရင အကယလ႔

error ျဖစခ႔သညရေသာ အဒ error က ကငတြယေျဖရငးေပမယ statement ေတြကေတာ catch{ န႔ } ၾကားမာ ေရးရပါမယ။ဥပမာ…

Code:

try{

num = Convert.ToInt32(temp);

}

catch{

Console.WriteLine(“Invalid Input”);

num = 0;

}

String temp ထမာ ရတ႔ data က integer အျဖစေျပာငးလ႔ ရရင num ထက ၀ငသြားမယ။ catch ထက မ၀ငပ Program

အလပဆကလပသြားမယ။ ေျပာငးလ႔ မရဘးဆရငေတာ catch ထက ၀ငလာျပး user က error message ျပတယ။ num ထက zero

ထညျပး program အလပဆကလပပါလမမယ။ try.. catch ကသးျခငးေၾကာင ကြၽနေတာတ႔ program က လမးတ၀ကမာ ရပသြားတာမး

ရေတာမာ မဟတပါဘး။

အခ error handling statement က detail ၾကညရေအာင။ အေပၚက example အတငးဆရင Convert လပတ႔ အခနမာ error

တကတာန႔ catch ထက အလပေတြက သြားျပးလပမာပါ။ try statement ထမာ error ျဖစနငတ႔ statement က တစခထရတ႔ အခနမာ

သပျပး ကစၥမရပ error messge ျပလ႔ရပါတယ။ ဒါေပမယ တခါတေလမာ error ျဖစနငတ႔ statement ေတြက တစခထကပျပးေတာလညး

ရနငပါတယ။ error အမးအစားကလညး မတဘးဆရင catch ထမာ user က error ျပတ႔ ေနရာမာ detail information ျပလ႔ မရတ႔

အခကအခရလာပါတယ။ ဒ example ထမာ ဆရငပ error ျဖစနငတ႔ အေျခအေနက ၂ မးရေနပါတယ။ number

အစားတျခားဟာထညလကရင FormatException ျဖစျပး၊ number ၾကးပ ၁၅ လးေလာကရကထညလကရင OverFlowException

ျဖစပါတယ။ ဒါေပမယ ဘယexception ပျဖစျဖစ ကြၽနေတာတ႔ catch ထမာ ေရးထားတ႔ Invalid Input ဆတ႔ message ပ ျပပါလမမယ။

ဒါက ကြၽနေတာတ႔က ပျပး detail ၾကတ႔ message ျပခငတယဆရငေတာ Catch ေရးတ႔ အခါမာ Exception အမးအစားန႔ parameter

ခြျပး လကခလ႔လညး ရပါတယ။ ဒလမးပါ..

Code:

try{

num = Convert.ToInt32(temp);

}

catch( FormatException ex )

{

Console.WriteLine(“Please enter number value”);

num = 0;

}

catch( OverFlowException ex )

Page 16: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

Console.WriteLine(“Your number is too large”);

num = 0;

}

catch

{

Console.WriteLine(“Unknown error”);

num = 0;

}

ဒါဆရငေတာ user ထညတာ number မဟတရင Please enter number value ဆျပး ျပပါမယ။ တနဖး အရမးၾကးေနရငေတာ Your

number is too large ဆျပး detail ျပနငပါလမမယ။ ကဒါဆရင error အမးအစားေတြန႔ exception handling

အေၾကာငးအၾကမးေလးေတာ သမယထငပါတယ။ program ေလးက ျပနျပငေရးလကပါဥးေနာ။

Code:

using System;

class Program

{

static void Main(string[] args)

{

string temp; int num;

Console.Write("Enter a number : ");

temp = Console.ReadLine();

try

{

num = Convert.ToInt32(temp);

}

catch (FormatException ex)

{

Console.WriteLine("Please enter number value");

num = 0;

}

catch (OverflowException ex)

{

Console.WriteLine("Your number is too large");

Page 17: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

num = 0;

}

catch

{

Console.WriteLine("Unknown error");

num = 0;

}

Console.WriteLine("Square of {0} is {1}", num, num * num);

Console.Write("\npress enter to close...");

Console.Read();

}

}

စမးေရးၾကညၾကပါဥး။ ေနာကေနဆကၾကတာေပါ။

အခကြၽနေတာတ႔ C# မာ သးတ႔ operator ေတြ အေၾကာငးက ဆကေျပာၾကရေအာင။ ကြၽနေတာတ႔ computer က ခငးေစတ႔ statement

ေတြထမာ operator ေတြက သးေလ႔ ရၾကတယ။ ဥပမာ number ၂ ခက ေပါငးခငတယ ဆရင ( + ) operator ကသးတယ။ variable

တခခထက တနဖး ထညေပးခငတယဆရင ( = ) operator ကသးတယ။ ဟတတယ မလား။ ကြၽနေတာတ႔ ဒ operator ေတြရ

အလပေတြက သျပးသားပါ။ C# ရ Operator table ေလးၾကညလကဥးေနာ။

C# Programmer's Reference

C# Operators

C# provides a large set of operators, which are symbols that specify which operations to perform in an expression. C#

predefines the usual arithmetic and logical operators, as well as a variety of others as shown in the following table. In

addition, many operators can be overloaded by the user, thus changing their meaning when applied to a user-defined

type.

Operator category Operators

Arithmetic + - * / %

Logical (boolean and bitwise) & | ^ ! ~ && || true false

String concatenation +

Page 18: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Increment, decrement ++ --

Shift << >>

Relational == != < > <= >=

Assignment = += -= *= /= %= &= |= ^= <<= >>=

Member access .

Indexing []

Cast ()

Conditional ?:

Delegate concatenation and

removal

+ -

Object creation new

Type information as is sizeof typeof

Overflow exception control checked unchecked

Indirection and Address * -> [] &

Arithmetic Overflow

The arithmetic operators (+, -, *, /) can produce results that are outside the range of possible values for the numeric

type involved. You should refer to the C# Language Reference section on a particular operator for details, but in general:

• Integer arithmetic overflow either throws an OverflowException or discards the most significant bits of the result

(see below). Integer division by zero always throws a DivideByZeroException.

• Floating-point arithmetic overflow or division by zero never throws an exception, because floating-point types are

based on IEEE 754 and so have provisions for representing infinity and NaN (Not a Number).

• Decimal arithmetic overflow always throws an OverflowException. Decimal division by zero always throws a

DivideByZeroException.

When integer overflow occurs, what happens depends on the execution context, which can be checked or unchecked. In

a checked context, an OverflowException is thrown. In an unchecked context, the most significant bits of the result are

discarded and execution continues. Thus, C# gives you the choice of handling or ignoring overflow.

In addition to the arithmetic operators, integral-type to integral-type casts can cause overflow (for example, casting a

long to an int) and are subject to checked or unchecked execution. Also note that bitwise operators and shift operators

never cause overflow.

Page 19: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ကြၽနေတာ အဓက ေျပာခငတာကေတာ ဒ operator ေလးေတြန႔ ပတသကျပး သသငတာေလးေတြပါ။ အရငဆး statement

တစခအတြငးမာ operator တစခထကပျပး ပါလာျပဆရင ဘယoperator က အရငဆး အလပလပသြားမလ။ ဥပမာဗာ ကြၽနေတာက

output 20 ထြကခငတယဆရင ေအာကက ၂ ခမာ ဘယလေရးမ မနမလ။

1) Console.Write( 2+3*4 );

Quote:

2) Console.Write( (2+3)*4 );

နပါတ ၁ အတငးဆရင output က 14 ဆျပး ထြကသြားပါလမမယ။ ဒါဆရငေတာ login error ျဖစျပေပါ။ no 2 အတငးေရးမ

ကြၽနေတာလခငတ႔ output ရပါလမမယ။ ဒေနရာမာ operator ေတြရ႕ priority က သဖ႔လလာပါျပ။

Precedence

Operators

Highest

+ - ! ~ ++x --x (T)x

* / %

+ -

<< >>

< > <= >= is as

== !=

&

^

|

&&

||

Lowest

= *= /= %= += -= <<= >>= &= ^= |=

operator ေတြ ၁ခထပပေတြ႔ရင Precedence အျမငဆးက အရငဆးလပပါတယ

အတမတခငရငေတာ

Quote:

( )

* /

+ -

Page 20: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ေလာကမတထားရင လေလာကပါတယ။ ( ) ကအရငဆးလပမယ။ ျပးရင * / ။ ေနာကဆးမ + - ေပါ။ ရမယေနာ။

ေနာကတခေျပာခငတာက increment operator(++) & decrement operator(--) အေၾကာငးပါ။ ကြၽနေတာဆမာ ရတ႔ integer value

တစခက 1 တးခင 1 ေလာခငရင အဒ operator ေတြ သးရပါတယ။

ဒ statement ေလးက output ဘယေလာကထြကမလ စဥးစားၾကညပါဥး။

Code:

int num1 = 3;

int num2 = 4;

Console.Write( num1++ + ++num2 );

output = 7 or 8 or 9 ????

increment operator က ေရ႕မာ ေရးရင pre incrememt ေနာကမာ ေရးရင post increment လ႔ခြတယ။ pre ဆရင အရငလပတယ။

post ဆရင ေနာကမလပတယေပါ။ ဒါဆရငေတာ output ဘယေလာကထြကမလဆတာ မနးနငေလာကျပထငတယေနာ။ (num1++)

က ေပါငးတ႔ အခနမာ 3 ပရေသးတယ။ (++num2) ကေတာ 5 ျဖစေနျပး။ ဒါေၾကာင 8 ထြကပါတယ။

က ေနာကထပသထားစရာ တစခရေသးတယဗ။ အဒါကေတာ operator ေတြ႔ ေပါငး၊ႏႈတ၊ေျမာက၊စား လပတ႔ အခါ datatype တရင

တတ႔type ထြကတယ။ မတဘးဆရငေတာ ၾကးတ႔type ထြကပါတယ။ ဒါေပမယ integer ထကေသးတ႔ type ေတြ ဆရငေတာ integer

type ထြကပါတယ။

ဥပမာ...

Code:

short v1 = 3;

short v2 = 4;

short v3 = v1 + v2; // error တကပါလမမယ။

int v3 = v1 + v2; // ဆမ မနမယ။

ဒ program ေလး ေရးျပး run ၾကညလကပါဥး။

Code:

using System;

public class Example1_6

{

static void Main()

Page 21: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

int i1 = 5;

long l = i1 * 3L;

decimal d = l; // implicit conversation

int i2 = (int) d; // explicit conversation

Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i2);

int i3 = i2 / 2;

Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i3);

int i4 = i1 + i2 * 10;

Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i4);

int i5 = i2++ + ++i3; // increment operator

Console.WriteLine("{0:C}\n{0:D5}\n{0:F2}\n",i5);

Console.Write("press enter to close...");

Console.Read();

}

}

program ထက {0:C} ဆတာက 0 index က တနဖးက currency format န႔ ျပမယေျပာတာ။ {0: D5} ဆတာက ေနရာ ၅ ေနရာ

အျပညယျပး ေနာကဆးကေန ျပမယ။ စသညျဖငေပါ။ run ၾကညလကရင သသြားမာပါ။ ဒေန႔ေတာ ဒေလာကန႔ပ နားလကရေအာငဗာ။

function

ကြၽနေတာတ႔ ဒေန႔ C# language မာ function ေတြ ဘယလတညေဆာကမလ။ ဘယလေခၚသးမလ စတာေတြက ေလလာရေအာင။

Function ဆတာ C# language မာမ မဟတပါဘး။ ဘယprogramming language မာမဆ ရပါတယ၊ သးၾကပါတယ။ function

သးရတယ ရညရြယခကေတြေတာ အမးမးရတာေပါဗာ။ ဥပမာအားျဖငေတာ ကြၽနေတာတ႔ program ရ ေနရာေတာေတာမားမားမာ

သးဖ႔လအပနငတ႔ code ေတြက function ေလးအျဖစခြေရးထားမယဆရင ကယေခၚခငတ႔ေနရာကေန လြယလြယကကေခၚသးနငမယ။

မားျပားလတ႔ coding ေတြက ရႈပပြေနေအာငမထားခငတ႔အခါမးမာလ function ေလးေတြ ခြျပးေရးေလ႔ရတာေပါ။ function

Page 22: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ခြျပးေရးကေရးရမယဆတ႔ သကမတခကေတာ မရပါဘး။ ကြၽနေတာprogram စေရးတနးကဆရင function ခြေရးခငေပမယ ဘယနားက

သြားျပး ခြရမလဆတာ မစဥးစားနငလ႔ code ေတြ အားလး main function ထမာ ပ စျပျပးေရးခ႔တာပါ။ ေနာကပငး ေရးလာရငးန႔

ဘယလမးဆရင function ေလးေတြ ခြေရးသငတယ ဆတာ သလာတာပါပ။ အဓကကေတာ program မားမားေရးလာရင အလလ

နားလညလာပါလမ။

Function

Function တစခမာ return type , function name and argument list ဆျပး အပငး ၃ ပငးပါတယဗ။ ဥပမာ….

Code:

int AddTwoNumber( int p1, int p2 )

{

return p1 + p2;

}

ဒ function ေလးမာ int လ႔ေရးလကတာက return type လ႔ေခၚပါတယ။ ဒ function ေလးက ေခၚမယဆရင integer value တစခ

ျပနထြကလာမယလ႔ ေျပာတာပါ။ return value မရဘးဆရငေတာ void လ႔ ေရးေပးရပါတယ။ မေပးလ႔ေတာ မရပါဘး။ AddTwoNumber

ဆတာကေတာ function name ေပါ။ function name ေတြ ေပးတ႔ေနရာမာ space ေတြ special char ေတြ ထညေပးလ႔ မရပါဘး။ ( )

ထမာ ေရးလကတ႔ int p1, int p2 ဆတာေတြက argument ေတြပါ။ ဒ function ကေခၚသးခငရင ထညေပးရမယ parameter

ေတြပါခငဗာ။ parameter လကမခခငတ႔ function ေတြေရးရငေတာ ( ) ထမာ ဘာမ မထညပေရးလ႔ ရပါတယ။

Function တခမာေရးတ႔ပေပၚမတညျပး function declaration, function definition န႔ function call ဆျပး ခြျခားထားပါေသးတယ။ အခ

အေပၚမာ ေရးလကတ႔ function က function definition လ႔ေခၚပါတယ။ ဘာလ႔လဆေတာ ဒ function ထမာ

ဘာအလပေတြလပမယဆတ႔ statement ေတြထညေရးထားလ႔ပါ။ အဒ function ေတြက Interface ထမာ ထညေရးေတာမယဆရငေတာ

အခလမး definition ေတြ ထညေရးလ႔ မရပါဘး။ function declaration ပေရးခြငရပါတယ။ ဒလမးပါ….

Code:

int AddTwoNumber( int p1, int p2 );

ကြၽနေတာတ႔ေရးထားတ႔ function ေတြက ျပနေခၚသးမယဆရငေတာ အဒါက function call လ႔ ေခၚပါတယ။ အေပၚက function ေလးက

ျပနေခၚမယဆရင ဒလေလး ေခၚရမာပါ…

Code:

int res = AddTwoNumber( 3 , 4 );

note: function call ပျဖစျဖစ definition ပျဖစျဖစ declaration ပျဖစျဖစ function လ႔ ေျပာလကတာန႔ ( ) ပါရမယဆတာေတာ

အေသသာမတထားလကဗာ။

function parameter Passing အေၾကာငးက ေနာကတပစမာ ေရးေပးမယဗာ။

__________________

Page 23: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Parameter passing in C#

Parameter passing ဆတာဘာလ အရငေျပာျပမယေနာ၊ ကြၽနေတာတ႔ေရးထားတ႔ function ေတြကျဖစေစ၊ library ထမာ ရျပးသား

predefined function ေတြကျဖစေစ ေခၚသးေတာမယဆရင အဒ function definition မာ ေၾကျငာထားတ႔ argument(parameger)

ေတြက ထညေပးဖ႔လအပပါတယ။ အလ function call မာ parameter ေတြထညေပးတာက parameter passing လ႔ ေခၚတာပါ။ C# မာ

parameter passing ၄ မးရပါတယ။

1. Value Parameter

2. Reference Parameter

3. Output Parameter န႔

4. Params Array တ႔ ျဖစပါတယ။

1)Value Passing

C# မာ default parameter passing က value pass ပါ။ ဆလတာကေတာ ကြၽနေတာတ႔ function ထက parameter ေပးလကတာက

actual value က copy တစခအေနန႔ ထညေပးလကတာပါ။ ဒါေၾကာင function အတြငးမာ အဒ value က ဘယလပ ေျပာငးသညျဖစေစ၊

နဂ value ေတာ ေျပာငးသြားမာ မဟတပါဘး။ ဥပမာ..

Code:

using System;

class valuePassTest

{

static void Main()

{

int num = 10;

Console.WriteLine("before : " + num);

Inc(num);

Console.WriteLine("after : " + num);

Console.Read();

}

static void Inc(int num)

{

num = num + 1;

}

}

Page 24: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

output

Code:

before : 10

after : 10

2)Reference Passing

ကြၽနေတာက Inc function ထမာ ေျပာငးလကတ႔ တနဖးက main function ထမာပါ လကျပး ေျပာငးခငတယဆရငေတာ reference

pass လပေပးရပါမယ။ reference pass လပဖ႔အတြကဆရင ref keyword ေလးက parameter ရ႕ေရ႕မာ ထညျပး ေရးေပးရမာပါ။ တခ႕

reference data type(class, array) ေတြက parameter ပ႔ရငေတာ ref keyword မထညေပးလညး ရပါတယ။

Code:

using System;

class referencePassTest

{

static void Main()

{

int num = 10;

Console.WriteLine("before : " + num);

Inc(ref num);

Console.WriteLine("after : " + num);

Console.Read();

}

static void Inc(ref int num)

{

num = num + 1;

}

}

output

Code:

before : 10

after : 11

Page 25: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

3) output parameter

Output parameter က reference parameter န႔ ဆငတပါတယ။ ဒါေပမယ output parameter ဆတ႔ အတငး သ႔က output return

ျပနခငတ႔ variable ေတြအတြက သးေလ႔ရပါတယ။ function အတြငးမာ out variable ထကတနဖးက assign မလပေသးခင

ယတြကလ႔မရပါဘး။

Code:

using System;

class outputPassTest

{

static void Main()

{

int num = 10; int result;

Square(out result, num);

Console.WriteLine("result : " + result);

Console.Read();

}

static void Square(out int result, int num)

{

result = num * num;

}

}

output

Code:

result : 100

4) Params Array

Function call မာ ထညေပးလကတ႔ value ေတြက array တစခအေနန႔ လကခခငတယဆရင params keyword ကသးရပါတယ။

example ေလးပ ၾကညလကေတာေနာ။

Code:

using System;

class paramsTest

{

Page 26: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

static void Main()

{

Show(1, 3, 5, 7, 9);

Console.Read();

}

static void Show(params int[] arr)

{

foreach (int x in arr)

{

Console.Write(x + " ");

}

}

}

output

Code:

1 3 5 7 9

***ဒ example ေလးမာ ကြၽနေတာေပးလကတ႔ parameter 5 လးက array အေနန႔ လကခသြားတာကေတြ႔ရမာပါ။

__________________

selection control statement

C# program ေတြ ေရးေနတ႔အခါ ကယေရးထားတ႔ statement ေတြက line by line compiler ကအလပလပေပးပါတယ။ တခါတေလ

ကယေရးထားတာေတြအားလး မလပေစခငပ အေျခအေန တစခေပၚမတညျပး ေရြးခယလပခငးခငရင Condition စစဖ႔လလာပါျပ။

ကြၽနေတာတ႔ C# မာ condition ေတြစစဖ႔အတြက ပစ ၃မးေရးလ႔ရတယဗ။

if…..else

switch

conditional operator (?

Page 27: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

အရငဆး ဥပမာေလး တစခန႔ သတ႔က ဘယလသးလ ယဥျပး ေျပာၾကညမယဗာ။ ကြၽနေတာက user ဆကေန number value တစခက

လကချပး even လား order လား ဆတာ စစတ႔ program ေလးတစခေရးၾကညရေအာင။

Code:

using System;

class Program

{

static void Main()

{

int num;

Console.Write("enter number");

try

{

num = Convert.ToInt32(Console.ReadLine());

if (num % 2 == 0)

{

Console.WriteLine("Even");

}

else

{

Console.WriteLine("Odd");

}

}

catch

{

Console.WriteLine("Error");

}

Console.Read();

}

}

ကြၽနေတာ အနေရာငကာလာန႔ ေရးထားတ႔အပငးေလးက ျပနရငးျပပါမယ။ user ထညလကတ႔ တနဖးက num ထမာ သမးလကပါတယ။

အဒ တနဖးက even ျဖစလားစစဖ႔အတြက 2 န႔ စားၾကညပါတယ။ အၾကြငးက 0 န႔ ညေနရင စားလျပတတယေပါ။ ဒါဆရင စကနးျဖစျပး

စားလ႔ မျပတဘးဆရငေတာ မကနးပါ။ if ေနာကမာ ကယစစခငတ႔ expression က ( န႔ ) ထထညေရးရပါတယ။ ျပး { } အတြငးမာ

မနရင လပခငတ႔ အလပကေရးတယ။ else ေနာကက { } ထမာေတာ မားရင လပခငတ႔ အလပက ေရးရပါတယ။

Page 28: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

အခကြၽနေတာေရးထားသလမး လပခငတ႔ အလပက statement တစေၾကာငးထဆရင { } က မထညေပးဘး ဆရငလညး မနပါတယ။

statement တစေၾကာငးထကပရငေတာ { } က မထညေပးလ႔ မရပါဘး။ if condition မာ မနရငလပခငတာပ ရျပး မားရင လပခငတာ

မရဘး ဆရငလညး else အပငးက ထညမေရးရပါဘး။ အ.. မားရငလပခငျပး မနရင လပခငတာ မရဘးဆရငေတာ if က ျဖတထားျပး

else ၾကးပ ေရးလ႔ေတာ မရဘးေနာ။ အလလပခငတယဆရငေတာ if () ထမာ not (!) ခေပးရပါမယ။

က.. အခ switch ကသးျပး ေရးၾကညရေအာင။

Code:

using System;

class Program

{

static void Main()

{

int num;

Console.Write("enter number");

try

{

num = Convert.ToInt32(Console.ReadLine());

switch (num % 2)

{

case 0: Console.WriteLine("Even");

break;

default: Console.WriteLine("Odd");

break;

}

}

catch

{

Console.WriteLine("Error");

}

Console.Read();

}

}

switch ကသးျပး စစဖ႔အတြက switch ေနာကမာ ကယစစခငတ႔ condition တစခထညေပးရတယ။ ျပး အဒ condition ကထြကလာမယ

result ေတြက case ေနာကမာ ေရးျပးစစရပါတယ။ case ေတြၾကကသေလာက ေရးလ႔ရပါတယ။ case တစခစအဆးမာ break

Page 29: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ထညေပးရပါတယ။ default ဆတာကေတာ else သေဘာမးပါ။ အေပၚက case ေတြအားလး မားခ႔ရငလ႔ အဓပၸါယရပါတယ။

ဒါေလးကပ conditional operator န႔ ေျပာငးစစၾကညရေအာင…

Code:

using System;

class Program

{

static void Main()

{

int num;

Console.Write("enter number");

try

{

num = Convert.ToInt32(Console.ReadLine());

Console.WriteLine( (num % 2 == 0) ? "Even" : "Odd" );

}

catch

{

Console.WriteLine("Error");

}

Console.Read();

}

}

Conditional operator ကသးရငေတာ ( ? ) ရ႕ေရမာ ကြၽနေတာစစခငတ႔ expression ကေရးရတယ၊ ( ? ) ရ႕ေနာကမာ

မနရငလပခငတာေရး ( : ) ရ႕ေနာကမာေတာ မားရင လပခငတာက ေရးရပါတယ။

Selection statement တစခစမာ သ႔ အားသာခကန႔ သရၾကပါတယ။ ဒထမာ အသးအမားဆးကေတာ အားလးသၾကတ႔ if … else

statement ပါပ။ condition စစခငတ႔ေနရာ ေတာေတာမားမားမာ if – else ကသးၾကေလ႔ရပါတယ။ if-else မာ variable အခငးခငး

တကစစလ႔လညး ရပါတယ။ တခါတေလမာေတာ ကြၽနေတာတ႔မာ စစစရာ အေျခအေနေတြ အရမးမားေနရငေတာ if-else န႔စစရတာ

အလပရႈပတယထငရင switch ကသးေလ႔ ရပါတယ။ ဥပမာဗာ.. ကြၽနေတာက user ဆကေန ၀ ကေန ၁၀ အတြငး number

တစလးထညေပးပါလ႔ေတာငးမယ။ ျပး.. user ထညလကတ႔ number က ျပနစစမယဆပါေတာ။ ဒလမးဆရငေတာ if-else ထက switch

က ပျပးသးလ႔ေကာငးမာပါ။ conditional operator န႔ေရးရငေတာ အရမးက ရႈပေထြးသြားမာပါ။ လး၀ အဆငေျပမာမဟတပါဘး။

if-else

Code:

Page 30: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

if (num == 0)

Console.WriteLine("Zero");

else if (num == 1)

Console.WriteLine("One");

else if (num == 2)

Console.WriteLine("Two");

else if (num == 3)

Console.WriteLine("Three");

else if (num == 4)

Console.WriteLine("Four");

else if (num == 5)

Console.WriteLine("Five");

else if (num == 6)

Console.WriteLine("Six");

else if (num == 7)

Console.WriteLine("Seven");

else if (num == 8)

Console.WriteLine("Eight");

else if (num == 9)

Console.WriteLine("Nine");

else

Console.WriteLine("Greater than 9");

switch

Code:

switch(num)

{

case 0:Console.WriteLine("Zero");

break;

case 1:Console.WriteLine("One");

break;

case 2:Console.WriteLine("Two");

break;

case 3:Console.WriteLine("Three");

Page 31: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

break;

case 4:Console.WriteLine("Four");

break;

case 5:Console.WriteLine("Five");

break;

case 6:Console.WriteLine("Six");

break;

case 7:Console.WriteLine("Seven");

break;

case 8:Console.WriteLine("Eight");

break;

case 9:Console.WriteLine("Nine");

break;

default:Console.WriteLine("Greater than 9");

break;

}

Conditional Operator

Code:

Console.WriteLine((num == 0) ? "Zero" : (num == 1) ? "One" : (num == 2) ? "Two" : (num == 3) ? "Three" : (num

== 4) ? "Four" : (num == 5) ? "Five" : (num == 6) ? "Six" : (num == 7) ? "Seven" : (num == 8) ? "Eight" : (num == 9)

? "Nine" : "Greater than 9");

Switch န႔ေရးတာ အရငးဆးျဖစမယထငတယေနာ။ ဒါေပမယ switch ရ႕ အားနညးခကေတြကလညး ေတာေတာမားတယဗ။ switch မာ

case ေနာကမာ constant expression ပေရးခြငရတယ။ variable ေတြန႔စစလ႔ မရဘး။

ဥပမာ

Code:

int val = 0;

if(num%2==val) // this is ok

switch(num%2)

{

case val: // this is not ok ( coz : val is a variable name, not a constant )

Page 32: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Conditional operator ကေတာ သပရႈပရႈပေထြးေထြး စစစရာ မလတ႔ အခါမးမာ သးတယ။ statement တစေၾကာငးထမာ condition

စစတ႔ အပငးကအျပးအစး ထညေရးခငရင သးတာေပါ။ က… Selection Control Statement ေကာငးေကာငးေရးတကေလာကျပ

ထငတယ မရငးတာေတြ ရရင ျပနေမးၾကပါ ခငဗ။

__________________

looping

ေဆာရးဗာ… အမမာ အလလပတာန႔ အလပေတြရႈပသြားလ႔။ ဒေန႔ ကြၽနေတာတ႔ looping ေတြ အေၾကာငး ဆကရေအာင။ looping

ဆတာဘာလ…. အလပတစခက ထပတလလ လပတာက loop လေခၚတယ။ ဥပမာဗာ ကြၽနေတာက screen မာ လငး၁လငးမာ star(*)

တစလးပါတ လငး ၁၀လငးရကျပခငတယ ဆပါေတာ။ ဒါကေရးမယဆရင Console.WriteLine(“*”); ဆတာက ၁၀ခါေရးရမာေပါ။

ဟတတယမလား။ ဒလ ၁၀ခါမေရးပ ၁ခါပေရးျပး အဒ statement ကပ ၁၀ၾကမလပေပးပါလ႔ compiler ကခငးခငရင ကြၽနေတာတ႔

looping ကသးရေတာမာပါ။ C# မာ looping ၄ မးရပါတယ။

၁။ while

၂။ do - while

၃။ for

၄။ foreach

looping ဆရင ေတာေတာမားမား သးၾကတာက for loop ပါ။ looping ေတြမာ looping variable ဆတာေလး

မားေသာအားျဖငရၾကပါတယ၊ ဥပမာ looping ၁၀ၾကမလပမယဆရင လကရမာ ဘယႏစၾကမရျပလဆတာ မတေပးထားမယ variable

ေလးေပါ။ looping အလပလပဖ႔အတြက အဓက အခက ၃ခက သရပါမယ။ loopng variable ေလး ဘယကစျပး အလပလပမလ ဆတ႔

start ရယ၊ ဘယအခနထအလပလပမလဆတ႔ stop ရယ၊ ဘယလ တးသြားမလဆတ႔ step ရယေပါ။ ဒ၃ခကက for looping မာ

ဒလေရးပါတယ…

Code:

for( start; stop; step )

{

statements;

}

Example:

Code:

for( int i = 1; i<=10; i++ )

{

Console.WriteLine(“*”);

}

Page 33: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

start ဆတာ looping variable ေလး စေၾကျငာျပး တနဖးတစခထညေပးလကတ႔ အပငးျဖစပါတယ။ stop ဆတာကေတာ condition

တစချဖစျပး၊ အဒ condition မာ မနေနသေရႊ႕ looping က အလပလပေနမာပါ။ step အပငးမာေတာ looping variable ထက

ေျပာငးသြားခငတ႔ တနဖးတခခထညေပးရပါတယ။ အေပၚက ဥပမာမာ looping variable ထထတနဖးက ၁တးသြားခငလ႔ i++

လေရးတာပါ။ တခါတေလ start အပငးက looping ရ႕ အေပၚမာလညး ေရးတာေတြ႕ဖးမာပါ။ ဒလပါပ step ကလညး looping

statements ေတြထမာ ထညေရးလ႔ရပါတယ။ ဒါဆရင ဒလေလး ျဖစသြားမာေပါ။

Code:

start;

for( ; stop; )

{

statements;

step;

}

Example:

Code:

int i = 1;

for( ; i<=10; )

{

Console.WriteLine(“*”);

i++;

}

အခေရးျပလကတ႔ for looping ေလးက while looping န႔ ေျပာငးေရးမယဆရငေတာ ဒလျဖစသြားပါမယ။

Code:

start;

while ( stop )

{

statements;

step;

}

Page 34: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Example:

Code:

int i = 1;

while( i<=10 )

{

Console.Write(“*”);

i++;

}

က… အဒ while loop ေလးမာပါတ႔ while() ေလးက ေအာကကပ႔ျပးေရးမယ ဆရငေတာ do-while ေလးက ဒလပစပါ။

Code:

start;

do{

statements;

step;

}while( stop );

Example:

Code:

int i = 1;

do{

Console.WriteLine(“*”);

i++;

}while( i<=10 );

do-while looping မာ condition စစတ႔ အလပက ေနာကဆးမာ ေရးလကေတာ condition မနသညျဖစေစ၊ မားသညျဖစေစ

အနညးဆးတစၾကမေတာ looping ထက statement ေတြက အလပလပသြားမာပါ။ for loop န႔ while loop ကေတာ မားရင တစၾကမမ

အလပလပမာ မဟတပါဘး။

__________________

Page 35: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

တခါတေလ ကြၽနေတာတ႔ Looping ေတြထမာ looping variable မပါတာမးလညး ရပါတယ။ looping က အၾကမအေရအတြက

အတအက မဟတပ looping variable မပါတ႔ looping မး သးဖ႔ လလာျပ ဆရငေတာ while န႔ do-while ကသးေလရပါတယ။ ဥပမာ..

ကြၽနေတာက user ဆက character တစလးလကခမယ၊ ျပးရင အဒ character ရ႕ ASCII value ကျပနျပးထတျပေပးမယ။ ဒအလပကပ

user ၾကကသေလာက လပနငတယ။ မလပခငေတာဘးဆရင ESC key ႏပျပးထြကရမယ။ ဟတျပေနာ ဒ program

ေလးေရးၾကညရေအာင။

Code:

using System;

class forlooptest

{

static void Main()

{

bool stop = false;

do

{

Console.Write("Enter a char to see ASCII value of it (or) press ESC to close.");

ConsoleKeyInfo cki = Console.ReadKey();

if (cki.Key != ConsoleKey.Escape)

Console.WriteLine("\n{0} = {1}\n", cki.Key.ToString(), (int)cki.KeyChar);

else

stop = true;

} while (stop==false);

}

}

ဒ 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 ပတသြားမာပါ။

Page 36: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

foreach looping

foreach looping က collection(အစအေ၀း) တစခအတြငးမာ ရသေလာက အားလး လပခငတယဆရင သးေလ႔ရပါတယ။ array ထမာ

ရသေလာကလပခငတယ၊ class ထက property ေတြအားလးလပခငတယ၊ ဒလ အေျခအေနမးမာ foreach loop ကသးပါတယ။

ဥပမာ.. MZ member ေတြအားလးက တစေယာက laptop တစလး လကေဆာငေပးခငတယ ဆရင foreach ကသးျပး ဒလ ေရးရမာပါ..

Code:

foreach( People p in MZ.Member )

{

p = “a laptop”;

}

foreach ကသးလကျခငးအားျဖင MZ ထမာ member ဘယေလာကရလ ဆတာက သေနစရာ မလေတာပါဘး။ member မကနမခငး ဒ

looping က အလပလပမာပါ။ foreach looping မာေတာ start ေတြ stop ေတြ step ေတြ မလပါဘး။ in keyword ရ႕ ေရ႕မာ colletion

အတြငးမာ ရတ႔ value ေတြရ႕ datatype ကေၾကျငာရျပး in ရ႕ ေနာကမာေတာ collection name ကေပးရပါတယ။ အခ foreach ကသးျပး

program ေလးတစခ ေရးၾကညရေအာင။ ကြၽနေတာက user ဆက စာေၾကာငးတစေၾကာငးလကခမယ။ ျပးရင အဒ စာေၾကာငးထမာ ရတ႔

character ေတြရ ASCII value က ျပနျပး ျပမယ။

Code:

using System;

class forlooptest

{

static void Main()

{

string st;

Console.Write("Enter a string : ");

st = Console.ReadLine();

foreach (char c in st)

{

Console.WriteLine("{0} = {1}", c, (int)c);

}

Console.Read();

}

}

__________________

Page 37: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

single dimension array

အခ ကြၽနေတာတ႔ C# မာ သးလ႔ရတ႔ Array ေတြအေၾကာငး ေလလာရေအာင။ C# မာ array အမးအစား ေတာေတာစစလငလငက

သးလ႔ရပါတယ။ အရငဆး ကြၽနေတာတ႔ သျပးသား single dimension array ေလးကေန စလကရေအာင။ ကြၽနေတာက integer value ၅

ခသမးဖ႔အတြက array ေလးတစခ ေဆာကခငရင ခလေၾကျငာရမာပါ။

Code:

int[ ] arr = new int[5];

ျပးရင အဒ array ထက တနဖး ၅ခ ထညခငတယဆရင ခလေရးရမယ။

Code:

arr[0] = 2;

arr[1] = 4;

arr[2] = 6;

arr[3] = 8;

arr[4] = 0;

ေနာကတစနညးအားျဖင array ေၾကျငာေနတနးမာ တနးဖးကပါ ထညေပးလကခငတယဆရင လညးရပါတယ။ အဒါက array

initialization လ႔ေခၚပါတယ။ ဒလမးပါ….

Code:

int[ ] arr = new int[ ] { 2, 4, 6, 8, 0 };

အခလမး statement တစေၾကာငးထမာ array declaration ေရာ initialization ပါ ေပါငးလပမယဆရင ေနာကတစမးက ဒလလညး

ေရးလ႔ ရပါတယ…

Code:

int[ ] arr = { 2, 4, 6, 8, 0 };

ဒါေပမယ statement ၂ ေၾကာငးခြေရးမယဆရငေတာ new int[ ] ဆတ႔ အပငးေလးက မထညလ႔ မရပါဘး။

Code:

int[ ] arr; // declaration statement

arr = new int[ ] { 2, 4, 6, 8, 0 }; // initialization statement

example ေလး တစခေလာက ေရးၾကညရေအာင..

Code:

Page 38: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

using System;

class forlooptest

{

static void Main()

{

int[] arr1 = { 1, 3, 5, 7, 9 };

int[] arr2 = { 2, 4, 6, 8, 0 };

int[] arr3 = new int[5];

for (int i = 0; i < arr1.Length; i++)

{

arr3[i] = arr1[i] + arr2[i];

}

Console.Write("Result array : ");

foreach (int v in arr3)

Console.Write(v + " ");

Console.Read();

}

}

__________________

multidimensional array

multi-dimension array ဆတာကေတာ dimension တစခထကပပါတ႔ array လ႔ ဆလတာေပါ ။ dimension တစခစက ( , )

ေလးန႔ ချပးေရးေပးရပါတယ။

Code:

int[,] arr = new int[3,2];

Page 39: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

အခ ေၾကျငာလကတ႔ array ေလးမာ dimension ၂ ခပါျပး၊ ပထမ dimension မာ ၃ ခနး၊ ဒတယ dimension မာ ၂ ခနး၊ ယသြားပါမယ။

တနဖးထညမယဆရင…

Code:

arr[0,0] = 1;

arr[0,1] = 2;

arr[1,0] = 3;

arr[1,1] = 4;

arr[2,0] = 5;

arr[2,1] = 6;

multidimensional array ေတြကလညး initialize လပလ႔ရပါတယ။ ဒလမးပါ…

Code:

int[,] arr = { {1,2} , {3,4} , {5,6} } ;

multidimensional array ေတြက looping ပတမယဆရငေတာ dimension အေရအတြကေပၚမတညျပး loopingေတြ ေရးရမာပါ။

Code:

for (int i = 0; i <= arr.GetUpperBound(0); i++)

{

for (int j = 0; j <= arr.GetUpperBound(1); j++)

Console.Write(arr[i, j]+" ");

Console.WriteLine();

}

GetUpperBound function ေလးက demension တစခရ႕ upperbound တနဖးက return ျပနပါတယ။ ဒါေၾကာင ကယသခငတ႔

dimension index ေလးက parameter ထညေပးရပါတယ။

အခကြၽနေတာတ႔ matrix 2 ခ ေျမာကတ႔ program ေလး ေရးၾကညရေအာင။ နညးနညးေတာ ရညျပး ႐ႈပမယထငတယ

Code:

using System;

class Program

{

static int GetInteger()

{

try

Page 40: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

return Convert.ToInt32(Console.ReadLine());

}

catch

{

return 1;

}

}

static void Main(string[] args)

{

int r1, r2, c1, c2;

int[,] matrix1;

int[,] matrix2;

int[,] matrix3;

Console.WriteLine("First Matrix\n************");

Console.Write("row : ");

r1 = GetInteger();

Console.Write("col : ");

c1 = GetInteger();

matrix1 = new int[r1, c1];

Console.WriteLine();

Console.WriteLine("Second Matrix\n************");

Console.Write("row : ");

r2 = GetInteger();

Console.Write("col : ");

c2 = GetInteger();

matrix2 = new int[r2, c2];

if (!((r1 == 1 && c1 == 1) || (r2 == 1 && c2 == 1) || (c1 == r2)))

{

Console.WriteLine("\nOut of result!");

Console.Read();

return;

Page 41: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

Console.WriteLine();

for (int i = 0; i <= matrix1.GetUpperBound(0); i++)

{

for (int j = 0; j <= matrix1.GetUpperBound(1); j++)

{

Console.Write("Enter value for first matrix : row {0}, column {1} : ", i, j);

matrix1[i, j] = GetInteger();

}

}

Console.WriteLine();

for (int i = 0; i <= matrix2.GetUpperBound(0); i++)

{

for (int j = 0; j <= matrix2.GetUpperBound(1); j++)

{

Console.Write("Enter value for second matrix : row {0}, column {1} : ", i, j);

matrix2[i, j] = GetInteger();

}

}

if (c1 != r2)

{

if (r1 == 1 && c1 == 1)

{

matrix3 = new int[r2, c2];

for (int i = 0; i <= matrix2.GetUpperBound(0); i++)

for (int j = 0; j <= matrix2.GetUpperBound(1); j++)

matrix3[i, j] = matrix2[i, j] * matrix1[0, 0];

}

else

{

matrix3 = new int[r1, c1];

for (int i = 0; i <= matrix1.GetUpperBound(0); i++)

Page 42: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

for (int j = 0; j <= matrix1.GetUpperBound(1); j++)

matrix3[i, j] = matrix1[i, j] * matrix2[0, 0];

}

}

else

{

matrix3 = new int[r1, c2];

for (int i = 0; i <= matrix1.GetUpperBound(1); i++)

{

for (int j = 0; j <= matrix1.GetUpperBound(0); j++)

{

for (int k = 0; k <= matrix2.GetUpperBound(1); k++)

matrix3[j, k] += matrix1[j, i] * matrix2[i, k];

}

}

}

Console.WriteLine("\nResult Matrix\n*************");

for (int i = 0; i <= matrix3.GetUpperBound(0); i++)

{

for (int j = 0; j <= matrix3.GetUpperBound(1); j++)

{

Console.Write(matrix3[i, j] + " ");

}

Console.WriteLine();

}

Console.Read();

}

}

မရငးျပေတာဘး ကယတငပ ဖတၾကညလကေနာ။ နားမလညတ႔ statement က ျပနေမးေပါ။

__________________

ArrayList

Page 43: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

အခထ ကြၽနေတာတ႔ သးခ႔တ႔ array ေတြရ႕ size ဟာ static size ျဖစပါတယ။ ကြၽနေတာတ႔ array က ၃ ခနးေၾကျငာလကရင ၃

ခနးထကပျပး တနဖးထညလ႔ မရပါဘး။ ကြၽနေတာတ႔ သးမယ array ရ႕ size က dynamic size အျဖစသးခငတယ ဆရငေတာ

သးျခားအေနန႔ collection class ေတြက သးၾကရမာပါ။ ပထမဆးအေနန႔ ArrayList Class အေၾကာငး စေျပာပါမယ။

ArrayList Class က array တစခလမး အလပလပေပးပါတယ။ သက variant size ပါ။ စေၾကျငာခငးခငးမာ ArrayList ရ႕ capacity က

၄ ခနးယထားေပးပါတယ။ ကြၽနေတာတ႔ တနဖးထညရငးန႔ ၄ခနးျပညျပးလ႔ ေနာကထပထပထညတာန႔ capacity က ၈ခနးျဖစသြားမာပါ။

ကယတကယ တနဖးထညထားတ႔ အေရအတြကကေတာ count ဆတ႔ property ကေန ျပနသနငပါတယ။ ArrayList က zero base

index ျဖစျပးေတာ သ႔ရ႕ index က integer type ပါ။ ArrayList ကလညး object type လကခတာျဖစတ႔ အတြက ကြၽနေတာတ႔ ၾကကတ႔

type ထညေပးခြငရပါတယ။ example ေလးၾကညရေအာင။

Code:

using System;

using System.Collections;

class arraylistTest

{

static void Main()

{

object[] arr = new object[3];

arr[0] = 1;

arr[1] = 2.2;

arr[2] = "abcdefg";

ArrayList ar = new ArrayList();

ar.Add(1);

ar.Add(9.456);

ar.Add("ABC");

ar.Add('Z');

ar.Add(new arraylistTest());

for (int i = 0; i < ar.Count; i++)

{

Console.WriteLine("{0}\t( {1} )", ar[i], ar[i].GetType());

}

Page 44: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Console.WriteLine("\nActual Size of your Array : " + ar.Count);

Console.WriteLine("Total Capacity of your Array : " + ar.Capacity);

Console.Read();

}

}

*** ArrayList Class က သးခငရင System.Collection က Using လပေပးရပါမယ။ ***

__________________

Hashtable

Hashtable class ထမာ key/value တြ႕ data ေတြ လကခပါတယ။ key/value အတြလကက DictionaryEntry လ႔ေခၚပါေသးတယ။

ArrayList မာ ကြၽနေတာတ႔ index က integer type သးပါတယ။ Hashtable မာေတာ index ေထာကဖ႔အတြက key ကသးပါတယ။

သကလညး object type ပါ၊ ဒါေၾကာင ကြၽနေတာတ႔ ၾက႔ကတ႔ type န႔ index ေထာကလ႔ ရပါတယ။ သမးမယ data ေတြကေတာ value

အပငးမာ သမးရပါတယ။ သလညး object type ပါပ။ Hashtable ကလညး ArrayList လပ size က dynamically increment လပလ႔

ရပါတယ။ Example ေလးၾကညရေအာင။

Code:

using System;

using System.Collections;

class arraylistTest

{

static void Main()

{

Hashtable ht = new Hashtable();

ht.Add("Name", "Sevenlamp");

ht.Add("Address", "Yangon");

ht.Add("Age", 28);

foreach (DictionaryEntry de in ht)

{

Console.WriteLine("{0}\t\t: \t {1} ", de.Key, de.Value);

}

Console.WriteLine("\nThere are {0} element/s in your Hashtable Array", ht.Count);

Console.Read();

}

Page 45: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

__________________

enumeration

ဒေန႔ ကြၽနေတာ OOP အေၾကာငး မစခင enumeration န႔ structure အေၾကာငး နညးနညး ေျပာခငတယဗာ။ အရငဆး variable

declaration အေၾကာငးက ျပနေႏႊးရေအာင။ ကြၽနေတာတ႔ number တနဖးတစခ သမးဖ႔ integer အမးအစား variable

တစခေၾကျငာမယဆရင…

Code:

int num;

ဆျပးေၾကျငာပါတယ။ ဒါဆရင memory ေပၚမာ integer value တစခသမးဖ႔ အတြက ေနရာ တစေနရာ ယလကပါတယ။ ဟတျပ…

ဒါဆရင ကြၽနေတာက

Code:

myOwnType var1;

ဆျပး ေၾကျငာလကတယ ဆပါေတာ။ ဒါဆကြၽနေတာတ႔ program က compiler က နားလညပါဥးမလား။ နားမလညနငေတာပါဘး

ဘာလ႔လဆေတာ myOwnType ဆတ႔ pre-defined type မဟတတာတစခက ေၾကျငာလကလ႔ပါ။ ကြၽနေတာတ႔ Integer type

ေၾကျငာေတာ compiler က integer value ေတြထညဖ႔မနးသပါတယ။ myOwnType ကေၾကျငာလကေတာ compiler က

ဘာအမးအစားအတြက ေၾကျငာေပးရမနးမသဘး ျဖစသြားပါတယ။ ဒါဆရင ကြၽနေတာတ႔က compiler က myOwnType ဆတာကေတာ

ဘယလ data မးေတြက သမးခငတာပါဆျပး ေျပာေပးလကရင မျဖစဘးလား။ ျဖစပါတယ။ ဘယလလပေပးရမာလ ကြၽနေတာတ႔ user

defined data type ေတြ ေၾကျငာေပးရမာပါ။ ဒလလပဖ႔အတြက ကြၽနေတာတ႔ enumeration ေတြ၊ structure ေတြ၊ class ေတြ

အေၾကာငးက သဖ႔လလာပါျပ။

ကြၽနေတာတ႔ enumeration ေဆာကဖ႔အတြက enum keyword ကသးရပါတယ။ ဟတျပ အခ ကြၽနေတာ myOwnType က create

လပပါေတာမယ။

Code:

enum myOwnType

{

Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday

}

myOwnType ထမာ ကြၽနေတာက ေန႔ ၇ ေန႔က သမးခငပါတယလ႔ defined လပလကပါတယ။ ကြၽနေတာက ေန႔ေတြက စာသားေတြန႔

ေရးလကေပမယ enumeration မာ တစကယသမးသြားမာက default integer type ပါ။ ကြၽနေတာက integer type အစား တျခား

ကနးျပည number type အျဖစ ေၾကျငာခငလ႔လညး ရပါတယ။ default အားျဖင 0 ကေန စျပး တခစက 1 ေပါငးေပါငးျပးသမးသြားမာပါ။

Page 46: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဆလတာက ေရ႕ဆးမာ ရတ႔ Sunday ရ႕ value က 0 ျဖစျပး Monday က 1 ၊ Tuesday က 2 ပါ။ ကြၽနေတာတ႔ ၾကကတ႔ number

န႔လညး ကယစားျပလ႔ ရပါတယ။ ဥပမာ..

Code:

enum myOwnType : byte

{

Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday

}

အေက ဒပစအတငးဆရင

Sunday = 0,

Monday = 5,

Tuesday = 6,

Wednesday = 7,

Thursday = 100,

Friday = 101,

Saturday = 102

ဆျပး ျဖစသြားပါမယ။

ကြၽနေတာတ႔ enumeration test လပဖ႔ program တစခေလာက ေရးၾကညရေအာင။

Code:

using System;

class Program

{

enum myOwnType : byte

{

Sunday, Monday = 5, Tuesday, Wednesday, Thursday = 100, Friday, Saturday

}

static void Main()

{

myOwnType wd = myOwnType.Friday;

int i = 7;

Console.WriteLine("{0} is {1}", wd, (int)wd);

Console.WriteLine("{0} is {1}", i, (myOwnType)i);

Console.ReadLine();

Page 47: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

}

Output

Code:

Friday is 101

7 is Wednesday

__________________

structure

Enumeration ကသးျခငးအားျဖင ကြၽနေတာတ႔ ကယပငdata type ေတြေဆာကျပး သးလ႔ရလာပါမယ။ enumeration သးတာ

ဘာပေကာငးလာလ အတအကေတာ မသဘးဗ။ ကြၽနေတာစတထငေတာ enumeration သးလကျခငးအားျဖင ၁။ memory ေပၚမာ

ေနရာယတ႔ size ေသးသြားမယ၊ ၂။ project တစခက develop လပတ႔ programmer ေတြ ၾကားထမာ standardized ျဖစသြားမယ (

ဥပမာ.. developer တစေယာကက Sunday လ႔ေပါငးရငေပါငးမယ၊ ေနာကတစေယာကက SUNDAY လ႔ေပါငးမယ၊

တျခားတစေယာကက sun လ႔ပ ေပါငးရငေပါငးမယ၊ enum defined လပလကျခငးအားျဖင ဒါမးကစၥေတြ မရနငေတာဘး ေပါ )။

Enumeration သးရင ကြၽနေတာတ႔က data type တစမးထပ သးလ႔ရတယ။ integer ဆ integer, byte ဆ byte ေပါ၊ record

တစခပစမး data type အစသမးခငရငေတာ enum အစား structure ေဆာကျပးသးၾကပါတယ။ (ဆငမဆငေတာ မသဘး

တြျပးေျပာလကတာ ) ဥပမာ.. ကြၽနေတာက ေကာငးသားတစေယာကရ႕ data ေတြသမးခငတယဆရင သမးမယ data ေတြထမာ roll

(int), name (string), mark (int) စတာေတြ ပါမယဗာ။ ဒါဆရင enum သးလ႔ မရေတာဘး၊ structure ဒါမမဟတ class

ကသးရေတာမယ။ structure န႔ class က အဓက value type န႔ reference type ပကြာသြားတာ။ ကနတာအားလး အတတနးပါးပ။

example program ေလးၾကညရေအာင။

Code:

using System;

struct Student

{

public int roll;

public string name;

public int mark;

}

class structuretest

{

static void Main()

{

Page 48: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Student s1;

s1.roll = 1; s1.name = "Ag Ag"; s1.mark = 90;

Student s2 = s1;

s2.roll = 2; s2.name = "Mg Mg";

Student s3 = new Student();

s3.roll = 3; s3.name = "Zw Zw"; s3.mark = 80;

Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s1.roll, s1.name, s1.mark);

Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s2.roll, s2.name, s2.mark);

Console.WriteLine("\nRoll : {0} \nName : {1} \nMark : {2}", s3.roll, s3.name, s3.mark);

Console.Read();

}

}

ျပနရငးရေအာင

Code:

struct Student

{

public int roll;

public string name;

public int mark;

}

ဒါက Student ဆတ႔ user defined type တစခ create လပတာပါ။ ဒလေရးလကျခငးအားျဖင compiler က Student ဆတာမာေတာ

integer အမးအစား variable ႏစခရယ၊ string တစခရယ ပါတယဆတာ သသြားပါျပ။ variable ေတြရ႕ေရ႕မာ public လ႔ေရးတာကေတာ

အဒ variable ေတြက structure ရ႕ အျပငဘက တျခားေနရာကေန ေခၚသးခြငျပတာပါ။

ျပးေတာ Main function ထမာ ကြၽနေတာက ေကာငးသား ၃ေယာကရ႕ data သမးခငတယ ဆေတာ Student variable ၃

ခေၾကျငာရမာေပါ။ ဒါေၾကာင ကြၽနေတာက s1, s2 န႔ s3 ဆျပး ေၾကျငာလကပါတယ။

Code:

Student s1;

ဆျပး ေၾကျငာလကတာန႔ ကြၽနေတာတ႔ စကရ႕ memory ေပၚမာ Student အမးအစား data ေတြသမးလ႔ရမယ ေနရာတစခ

ေဆာကေပးသြားပါတယ။ အဒ ေနရာထမာ roll, name, mark တ႔ သမးဖ႔ေနရာပါ ပါျပးသားပါ။

Code:

Page 49: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

s1.roll = 1; s1.name = "Ag Ag"; s1.mark = 90;

ျပးေတာမ ကြၽနေတာက အဒထက 1, “Mg Mg”, 90 တ႔က ထညလကပါတယ။ Student အမးအစား s1 ထမာ ရတ႔ variable ေတြက

ျပနေခၚခငတာျဖစလ႔ s1(dot)variable name ဆျပး ေရးရပါတယ။

Code:

Student s2 = s1;

ေနာကထပ s2 က ေၾကျငာတ႔ေနရာမာေတာ s1 ထက တနဖးေတြကပါ s2 ထက ထညလကပါတယ။ ဒါဆရင s2 ထမာ ရတ႔ roll, name န႔

mark မာ s1 ထက တနဖးေတြ ေရာကျပးသားျဖစသြားပါတယ။

Code:

s2.roll = 2; s2.name = "Mg Mg";

ျပးေတာမ s2 ရ႕ roll န႔ name က ျပနျပငလကပါတယ။ အမတကေတာ မျပငလကပါဘး။ ဒလျပငလကျခငးအားျဖင နဂတနဖးျဖစတ႔ s1

ထမာ ေျပာငးသြားမလား? Structure က value type ျဖစလ႔ s1 ထမာ လကျပး ေျပာငးသြားမာ မဟတပါဘး။

Code:

Student s3 = new Student();

s3.roll = 3; s3.name = "Zw Zw"; s3.mark = 80;

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 ေပါ။

ဒ program ေလးက ရကျပး run ၾကညလကပါဥး။

__________________

ကြၽနေတာတ႔ မေန႔က ေရးခ႔တ႔ 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 ေတြ ျဖစၾကမာပါ။

Code:

Page 50: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

class People

{

string name; // member data

int age; // member data

void eat() // member function

{

// eat something…

}

void sleep() // member function

{

// sleep at night.

}

}

အခကြၽနေတာ ေရးလကတ႔ People class က datatype class လ႔ ေခၚပါတယ။ မေန႔က program ေလးက class အေနန႔ ျပနျပး

ေရးၾကညရေအာင။

Code:

class Student

{

public int roll;

public string name;

public int mark;

public void Display()

{

Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,

roll, name, mark);

}

}

class StudentTest

{

static void Main()

{

Student s1 = new Student();

s1.roll = 1; s1.name = “Ag Ag”; s1.mark = 90;

Page 51: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Student s2 = new Student();

s2.roll = 2; s2.name = “Zw Zw”; s2.mark = 88;

Student s3 = s2;

s3.roll = 3; s3.name = “Ma Ma”;

// display

s1.Display();

s2.Display();

s3.Display();

Console.Read();

}

}

Output:

Code:

1 Ag Ag 90

3 Ma Ma 88

3 Ma Ma 88

ဒ 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 ေဆာကေပးရပါတယ။ ရႈပသြားျပထငတယ

ကြၽနေတာတ႔ 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 ေပၚမာ ေနရာယပက ပေလး ဆြျပေပးထားပါတယ၊ ပၾကညလကရင နညးနညးနားလညသြားမယ ထငပါတယ။

Page 52: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

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 က

ရကထတတ႔ ေနရာမာပါ ေပၚလာရျခငးျဖစပါတယ။ ေတာေတာေလးေတာ ရႈပသြားမယထငတယ။ ကြၽနေတာ စာအေရးအသား ညေတာ

ေသေသခာခာ နားလညေအာင မရငးျပနငလ႔ပါ။

constructors

ဒေန႔ ကြၽနေတာတ႔ Constructor အေၾကာငး ေျပာရေအာင။ ကြၽနေတာတ႔ student က object ေဆာကတနးကေရးခ႔တ႔ code ေလးက

ျပနၾကညရေအာင။

Code:

Student s1 = new Student();

ကြၽနေတာတ႔ 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 ေတြ ဘယလေဆာကလ ေလလာလကရေအာင။

Instant Constructor, Private Constructor န႔ Static Constructor ဆျပး Constructor အမးအစား ၃ မးရပါတယ။ လသအမားဆးန႔

အသးလညး အမားဆး မျဖစမေနသးေနရတ႔ constructor အမးအစားကေတာ instant constructor ျဖစပါတယ။ instant constructor

ဆတာကေတာ ကြၽနေတာတ႔ class ေတြက object ေဆာကဖ႔အတြက new operator န႔ တြျပး ေခၚေနရတ႔ constructor ပ ျဖစပါတယ။

instant constructor မာ ၂ မးထပခြနငပါတယ။ Default Constructor န႔ parameterized constructors ဆျပး ျဖစပါတယ။ Default

constructor က compiler က auto ေဆာကေပးတယဆတာ အေပၚမာ ကြၽနေတာေျပာခ႔ျပးပါျပ။ ဒါေပမယ တစခ သထားရမာက

Page 53: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

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 ေလး

ေဆာကပါမယ။

Code:

class Student

{

public int roll;

public string name;

public int mark;

public Student() // default constructor

{

roll = -1;

name = “?”;

mark = 0;

}

public void Display()

{

Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,

roll, name, mark);

}

}

class StudentTest

{

static void Main()

{

Student s1 = new Student();

s1.Display();

Console.Read();

}

}

Page 54: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

အေက ဒ program ေလးက run ၾကညရင constructor ထမာ ကြၽနေတာတ႔ ထညေပးထားတ႔ အတငး Roll = 1, Name = “?” န႔ Mark =

0 ဆျပး ေပၚလာမာပါ။ constructor က မထညပ run ၾကညရငေတာ Roll = 0, Name = “” န႔ Mark = 0 ျဖစေနပါလမမယ။ ဒါက

default constructor အလပလပပပါ။ အခ parameterized constructor အေၾကာငးဆကၾကညရေအာင။ ကြၽနေတာက student class

က object ေဆာကတ႔ constructor function ေလးထက student ရ႕ name ေလးက parameter အေနန႔ ထညေပးခငတယ ဆရင

အခကြၽနေတာတ႔ ေဆာကထားတ႔ default constructor က သးလ႔ မရေတာပါဘး။ ဒါဆ string တစခ လကခမယ constructor

တခထပေရးေပးဖ႔ လအပလာပါျပ။ အခလ ေရးလကပါမယ။

Code:

class Student

{

public int roll;

public string name;

public int mark;

public Student(string name) // parameterized constructor

{

roll = -1;

this.name = name; // assign local to member

mark = 0;

}

public void Display()

{

Console.WriteLine(“\n Roll : {0} \n Name : {1} \n Mark : {2}”,

roll, name, mark);

}

}

class StudentTest

{

static void Main()

{

Student s1 = new Student(“Mg Mg”);

s1.Display();

Console.Read();

}

}

Page 55: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒ program ေလးက run ရင Roll = -1, Name = “Mg Mg” န႔ Mark = 0 ဆျပး ျပပါလမမယ။ ဒ program မာ ကြၽနေတာက default

constructor အစား parameterized constructor ကထညလကပါတယ။ ဒါဆရင compiler က default constructor ေဆာကေပးမာလား

? မေဆာကေပးဘးေနာ။ ဒါေၾကာင ကြၽနေတာက Main function ထမာ ဒလ သြားေရးရင error တကပါလမမယ။

Student s2 = new Student(); // error code

ဘာလ႔လ ဆေတာ 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 အေၾကာငး နားလညျပလားေတာ မသဘး။ နားမလညဘးဆရငလညး ေျပာၾကဥးဗာ။ ထပျပး ျပနရငးေပးပါမယ။

ေနာကေန႔မ Private န႔ Static constructor ေတြ အေၾကာငးဆကရေအာငဗာ။

__________________

static constructor

ဟေန႔က ကြၽနေတာတ႔ 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 ကေရးေပးေလရပါတယ။ ဥပမာ…

Code:

using System;

class Constant

Page 56: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

private Constant()

{}

public static string DeveloperName = "Sevenlamp";

}

class Program

{

static void Main()

{

//Constant c = new Constant(); // error

Console.WriteLine(Constant.DeveloperName);

Console.Read();

}

}

ဒ 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 ၾကညရေအာင။

Code:

using System;

class Constant

{

private Constant()

{}

static Constant()

{

Console.WriteLine("print from static constructor");

DeveloperName = "Sevenlamp";

}

public static string DeveloperName;

Page 57: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

class Program

{

static void Main()

{

Console.WriteLine(Constant.DeveloperName);

Console.WriteLine(Constant.DeveloperName);

Console.Read();

}

}

Program run လကရင “Sevenlamp” ဆတ႔ စာသားက မရကျပခငမာ “print from static constructor” ဆတ႔ စာသားကအရင

ရကသြားတာ ေတြ႔ရမာပါ။ ဒါေပမယ တစခသထားရမာက static constructor က static member ေတြက မေခၚခင ပထမဆး တစၾကမပ

အလပလပပါတယ။ ဒါေၾကာင ကြၽနေတာက developername က ၂ ၾကမရကျပထားေပမယ “print from static constructor” ကေတာ

တစၾကမပ ေပၚလာမာျဖစပါတယ။ က ဒေလာကဆ ကြၽနေတာတ႔ constructor ေတြ အေၾကာငး နညးနညးနားလညလာျပ ထငပါတယ။

ေနာကေန႔မာ static member န႔ instant member အေၾကာငး ဆကေျပာပါမယ။

__________________

Static member vs instant member

class တစခထမာ ရတ႔ member ေတြက static member န႔ instant member ဆျပး ၂ မးခြ႔ျခားနငပါေသးတယ။ static member က

class member လ႔လညး ေခၚပါတယ။ instant member ကေတာ object member ေပါ။ ဟတျပ ဒါဆရင အဒ static member ေတြန႔

instant member ေတြ ဘာကြာျခားလ ဆကၾကညရေအာင။ အဓက ကြာျခားခက ၄ ခကေလာက ရတယဗ။ အရငဆး ဒ program

ေလးက run ၾကညလကပါဥး။

Code:

class Test

{

public static string clsVar; // static member

public string objVar; // instant member

public void Show() //instant member

Page 58: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

Console.WriteLine(clsVar); // use class member from instant member

Console.WriteLine(objVar);

}

}

class Program

{

static void Main(string[] args)

{

Test t = new Test();

Test t2 = new Test();

t.objVar = "this is object member"; // call from object instant

Test.clsVar = "this is class member"; // call from class name

t.Show();

Console.WriteLine();

t2.Show();

Console.Read();

}

}

၁။ static member ေတြ ေၾကျငာဖ႔အတြက static keyword က သးရပါတယ။ ရးရးmember ေတြမာေတာ static ထညရနမလပါ။

Code:

public static string clsVar; // static member

public string objVar; // instant member

၂။ instant member ေတြက class ကေဆာကတ႔ object ေတြမာ တစခဆ copy ပါသြားမာ ျဖစေပမယ၊ static member ကေတာ object

အားလးအတြက တစခထရမာ ျဖစပါတယ။

Code:

Test t = new Test();

Test t2 = new Test();

Page 59: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

၃။ instant member က object name ကေန ျပနေခၚသးရျပး၊ static member ကသးဖ႔အတြကေတာ class name ကေနတဆငသာ

ေခၚခြငရပါတယ။

Code:

t.objVar = "this is object member"; // call from object instant

Test.clsVar = "this is class member"; // call from class name

၄။ static member ေတြက instant member ေတြကေန တဆငေခၚသးခြငရပါတယ။ ဒါေပမယ instant member ေတြကေတာ static

member ေတြကေန ေခၚခြငမရပါဘး။

Code:

public void Show()

{

Console.WriteLine(clsVar); // call class member from object member

Console.WriteLine(objVar);

}

ကြၽနေတာတ႔ 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 စစေပါငး

ဘယႏစေယာက ရလဆတာက ျပနျပေပးခငတယ။

Code:

class Customer

{

string acno;

string name;

Page 60: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

public Customer(string name)

{

this.acno = GetNewAcno(); //call static member function

this.name = name;

}

public override string ToString()

{

return acno + "-" + name;

}

public static int counter = 0;

public static string GetNewAcno()

{

counter++;

return "C" + counter.ToString("D3");

}

}

public class Program

{

static void Main()

{

Customer a = new Customer("Mg Mg");

Customer b = new Customer("Zw Zw");

Customer c = new Customer("Ag Ag");

Console.WriteLine("{0}", a);

Console.WriteLine("{0}", b);

Console.WriteLine("{0}", c);

Console.WriteLine("Customer Count is {0}", Customer.counter);

Console.Read();

}

}

__________________

property in C#

Page 61: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

ဒေန႔ ကြၽနေတာတ႔ C# ရ႕ property ေတြ အေၾကာငး ေျပာၾကရေအာင။ အရငဆး property ေတြ ဘယလေၾကာင ျဖစေပၚလာလ

အရငစေျပာပါမယ။ ဟတျပ ကြၽနေတာတ႔ class တစခထက instant member data ေတြက တျခား class ေတြကေန ေခၚသးမယဆရင

အဒ instant member ရ႕ေရ႕မာ public keyword ထညျပး ေၾကျငာေပးရပါတယ။ ဒလမးပါ…

Code:

using System;

class Test_A

{

public int var;

}

class Program

{

static void Main()

{

Test_A obj = new Test_A();

obj.var = 1;

Console.WriteLine(obj.var);

Console.Read();

}

}

ဒ 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 ေတြက သးရပါတယ။ ဒလမးပါ….

Code:

using System;

class Test_B

{

private int var;

public void SetData(int value)

{

var = value;

Page 62: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

public int GetData()

{

return var;

}

}

class Program

{

static void Main()

{

Test_B obj = new Test_B();

obj.SetData(2);

Console.WriteLine(obj.GetData());

Console.Read();

}

}

ဒ 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 က ဘယလေရးရလ….

Code:

using System;

class Test_C

{

private int var;

public int MyVar

{

get

{

return var;

Page 63: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

set

{

var = value;

}

}

}

class Program

{

static void Main()

{

Test_C obj = new Test_C();

obj.MyVar = 3;

Console.WriteLine(obj.MyVar);

Console.Read();

}

}

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 ၾကညပါဥး။

Code:

using System;

class myNumber

{

private int num;

public string Num

Page 64: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

{

get

{

return num.ToString();

}

set

{

try

{

num = Convert.ToInt32(value);

}

catch

{

num = 0;

}

}

}

public int Square

{

get

{

return num * num;

}

}

}

class Program

{

static void Main()

{

myNumber obj = new myNumber();

Console.Write("Enter a number : ");

obj.Num = Console.ReadLine();

Console.WriteLine("Square of {0} is {1}", obj.Num, obj.Square);

Console.Read();

Page 65: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

}

OOP

က ဒေန႔ေတာ database အပငးေလး ခဏနားျပး C# ဘကက နညးနညးျပနလညေအာင။ ကြၽနေတာတ႔ အခေနာကပငး programming

language မာ အသကယကယေလာငေလာင ျဖစလာတာက OOT လ႔ ေခၚတ႔ Object-Oriented Technique ပျဖစပါတယ။ OO မာ

ဘာေတြပါလ…

အေမြဆကချခငးလ႔ ေခၚတ႔ inheritance၊

အသြငေျပာငးျခငးလ႔ေျပာလ႔ရတ႔ Polymorphism၊

Data hiding လ႔ေခၚတ႔ member data ေတြက သ၀ကသမးဆညးထားျခငး၊

Encapsulation သမးဆညးထားတ႔ member data ေတြက တဆငချဖင သးခြငေပးျခငး၊

စသညျဖငေပါ႔ဗာ.. အဒါေတြ ပါပါတယ။

Inheritance အေမြဆကချခငးဆတာဘာလ???

ဒလေလးေတြးၾကညရေအာငဗာ အခကြၽနေတာတ႔ မဘေတြပငဆငတ႔ ပငဆငမႈေတြဟာ ကြၽနေတာတ႔ရ႕ ပငဆငမႈေတြပါပ။ ဒလပါပ

ကြၽနေတာတ႔ရ႕ ပငဆငမႈေတြကလညး ကြၽနေတာတ႔ရ႕ မးဆကသစေတြက ပငဆငၾကဥးမပါ။ ဒသေဘာတရားေလးက ယျပး OOမာ

inheritance ဆတာေပၚေပါကလာတာပါ။ class တစခရ႕ ပငဆငမႈ property ေတြဟာ အဒ class ရ႕ child ေတြကလညး

ပငဆငနငပါတယ။ ဒလ ပငဆငနငျခငးအားျဖင ကြၽနေတာတ႔က class ေတြအားလး အတြက တညတ႔ property ေတြက

အၾကမၾကမေၾကျငာေပးေနစရာ မလေတာပါဘး။ ဥပမာဗာ ကြၽနေတာက လတစေယာကက ကယစားျပမယ class

တစခေဆာကမယဆရင အဒ class ထမာ ဘယလ member ေတြပါမလ စဥးစားၾကည၊ နမညပါမယ၊ အသကပါမယ၊

ေနရပလပစာပါမယဗာ၊ စသညျဖငေပါ။

Code:

class People

{

string Name;

int Age;

string Address;

}

Page 66: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

က…အခ ေနာကတစခါ ကြၽနေတာက ေကာငးသားတစေယာကက ကယစားျပမယ class တစခထပေဆာကဖ႔ လလာျပဆရငေရာ

ဘယလ member ေတြပါမလ၊ ေကာငးသားမာလညး နမယပါမယ၊ အသကပါမယ၊ လပစာပါမာပါပ၊ ေကာငးသားမာ ပပါလာတာက roll

နပါတပါမယ၊ class ပါပါမယ။

Code:

class Student

{

string Name;

int Age;

string Address;

int Roll;

int Class;

}

ဟတျပ ဒလအေျခအေနမးမာ နမညတ႔ အသကတ႔က ထပျပး မေၾကျငာခငဘးဆရင ကြၽနေတာတ႔ Student class က People class ရ႕

child အျဖစ ေၾကျငာလ႔ ရပါတယ။ ဒလမးပါ…

Code:

class Student : People

{

int Roll;

int Class;

}

ဒါကinheritance လပတယလ႔ ေခၚပါတယ။ inheritance လပလကျခငးအားျဖင People class ထက member data က Student class

ထမာ ျပနျပ ေၾကျငာေပးေနစရာ မလေတာပါဘး။ ဒါေပမယ ဒေနရာမာ အေရးၾကးတ႔ အခကတစခကက သထားဖ႔ လပါေသးတယ။

ဒလဗာ ကြၽနေတာတ႔ မဘရ႕ ပငဆငမႈအားလး ကြၽနေတာတ႔ရမလား၊ မရပါဘး သတ႔ ကယပငအတြက သမးထားတာေတြလညး

ရနငပါတယ။ C# language မာလ အဒလမး ခြျခားဖ႔အတြက ကြၽနေတာတ႔ Access Modifier ဆတာက သဖ႔လအပလာပါတယ။ C#

language မာ access modifier ၅ မးရပါတယ။ အဒါေတြ ကေတာ

-public ( အမားသး )

-protected ( မမႏငchild ေတြသး )

-private ( မမကယတငသး )

-internal ( library တအတြငးသး )

-protected internal ( child ျဖစလင၄ငး၊ library တလင၄ငး သး )

စသညတ႔ ျဖစပါတယ။ အေပၚက example People class ေလးမာ ကြၽနေတာတ႔ access modifier မထညေပးလကပါဘး။ ဒါဆရင

default အေနန႔ private ပါ။ ဒါေၾကာင People class ထက member data သးခက people class အတြငးမာပ သးခြငရပါတယ။ Student

Page 67: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

မာ သးလ႔ မရပါဘး။ အခကြၽနေတာတ႔က Student class ထကေနပါ သးခြငရခငတာျဖစလ႔ protected member

အျဖစေၾကျငာေပးရမာပါ။

Code:

class People

{

protected string Name;

protected int Age;

protected string Address;

}

Polymorphism အသြငေျပာငးျခငးဆတာကေရာ???

ကြၽနေတာတ႔ ရပကြကေတြမာလပေလရတယဗာ တခါတေလ ရပကြကရးကေနျပးေတာ တစအမက လတစေယာကႏႈနး

အစညးအေ၀းတကရမယတ႔ ဘာတ႔ ၾကဖးမာေပါ။ ဟတက႔ ရပကြကရးက ေခၚတာက လတစေယာကလ႔ ေခၚတာပါ တနညးအားျဖင

people class က ေခၚတာပါ။ အဒါက အမမာ ရေနတ႔ ေကာငးသားတစေယာကက သြားတကလ႔ မရဘးလား၊ ရပါတယ။ Teacher

တစေယာကသြားတကမယဆလ႔လ ရပါတယ။ Teacher ကလညး people တစေယာကပ ျဖစလ႔ပါ။ ဒါေပမယ Student ပ

သြားသညျဖစေစ၊ Teacher ပသြားသညျဖစေစ၊ ဒါမမဟတ People ကယတငပ သြားသညျဖစေစ၊ အားလးက People လ႔ပ ျမငပါတယ။

အားလး အခြငအေရးတနးတပါပ။ Student မ႔ အခြငအေရးပရမလား မရပါဘး။ အေက အဒလမး People ကေခၚတာက Stuent

သြားလကတာက အသြငေျပာငးလျခငး ( polymorphism ) လ႔ ေခၚပါတယ။

Code:

static void Main()

{

People p;

p = new Student();

}

Polymorphism မာ သတထားရမည အခကကေတာ child က parent အသြငေျပာငးနငေပမယ parent ကေတာ child အျဖစေျပာငးလ႔

မရပါဘး။ ဆလတာကေတာ ေကာငးသားအားလး စာေမးပြလာေျဖပါဆျပး ေခၚတာက အမမာ ရတ႔ လၾကးေတြသြားေျဖလ႔ ရမလား

မရပါဘး၊ ဒသေဘာပါ။ Student ကေတာငးရငေတာ People ေပးလ႔ မရပါဘး၊ Student ပ ေပးမ ရမာပါ။

Data Hiding

Data hiding ဆတာကေတာ ကြၽနေတာတ႔ အမမာ မသားစပငဆငမႈေတြက တျခားလေတြသေအာင ထတေၾကျငာေလရလား? မရပါဘး

တတတတေလးပ သမးထားေလရပါတယ။ ဒသေဘာပါပ class ေတြထမာရတ႔ member data ေတြကလညး အျပငကေန

ေခၚလ႔မရေအာင private လပထားျခငးက data hiding လ႔ ေခၚပါတယ။

Encapsulation

Page 68: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

Encapsulation ဆတာကေတာ ကြၽနေတာတ႔ hide လပထားတ႔ data ထက လအပတ႔ dataေတြက function

ေတြကေနေသာလညးေကာငး၊ property ေတြကေနတဆငေသာလညးေကာငး၊ အသးျပနငဖ႔အတြက စမေပးျခငးပ ျဖစပါတယ။

__________________

function overloading vs function overriding

Function Overloading Vs Function Overriding

ကြၽနေတာတ႔ ဒေန႔ function overloading န႔ function overriding အေၾကာငးေလး ေျပာၾကရေအာင။ အရငဆး function overloading

အေၾကာငးေျပာရေအာင။ overload ဆတာ အလပတစခထကပျပး လပတာက ေျပာခငတာပါ။ function overloading ဆေတာ

ကြၽနေတာတ႔ ေရးလကတ႔ function က တာ၀န တစခထကပျပး လပေဆာငေပးတာကရညရြယတာပါ။ function name က တစခထပ

ဒါေပမယ လပေဆာငမႈအမားၾကး လပနငေအာငေပါ။ ဥပမာဗာ.. ကြၽနေတာက string ကေန integer ေျပာငးတ႔ function

ေလးတစခေလာက ေရးခငတယ။

Code:

static int ConvertToInteger(string st)

{

try

{

return Convert.ToInt32(st);

}

catch

{

return 0;

}

}

က.. ဒ function ေလး ေရးလကျခငးအားျဖင ကြၽနေတာတ႔ string ကေန integer ေျပာငးခငတငး လြယလြယကက ေခၚလ႔ ရသြားမယ။

ဒါေပမယ တျခား type ေတြကေနေျပာငးခငရင ဒ function သးလ႔ ရမလား။ မရပါဘး။ ဒါဆ ကြၽနေတာက တျခားtype ေတြ

အတြကကလညး ဒလမး function ေတြ ထပေရးေပးဖ႔ လပါလမမယ။

Code:

static int ConvertToInteger(decimal dec)

{

try

{

return Convert.ToInt32(dec);

Page 69: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

catch

{

return 0;

}

}

static int ConvertToInteger(long l)

{

try

{

return Convert.ToInt32(l);

}

catch

{

return 0;

}

}

ဟတျပေနာ.. အခလမး 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 ျဖစေစ၊ အရညအတြက ျဖစေစမတရင

ရပါတယ။

ေနာကတစခကေတာ 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 ေလးပါတယ။

Code:

Page 70: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

class animal

{

public void eat()

{

Console.WriteLine("Eat something");

}

}

အေက.. အဒ 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 လပဖ႔ လလာပါျပ။

ဒါဆ function overriding လပဖ႔ ဘာလမလ? Parent class ထမာ ဒတငးေရးထားတ႔ function တငးကေတာ override လပလ႔ မရပါဘး။

override လပဖ႔ ခြငျပထားတ႔ function ေတြကပ လပလ႔ရတာပါ။ ဒလ override လပဖ႔ ခြငျပခငတယဆရင parent class ထက function

ရ႕ေရ႕မာ virtual ဆတ႔ keyword ေလးထညေရးေပးလကရပါတယ။

Code:

class animal

{

public virtual void eat()

{

Console.WriteLine("Eat something");

}

}

override ျပနလပမယ child class က function ေရ႕မာေတာ override ဆတ႔ keywordက ထညေပးရပါတယ။

Code:

class dog : animal

{

public override void eat()

{

Console.WriteLine("Eat Bone!");

Page 71: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

}

}

က… example program ေလး တစခေလာကေရးၾကညပါဥး။

Code:

class animal

{

public virtual void eat()

{

Console.WriteLine("Animal: Eat something");

}

}

class dog : animal

{

public override void eat() // function overriding

{

Console.WriteLine("Dog: Eat Bone!");

}

}

class ant : animal

{

public override void eat()

{

Console.WriteLine("Ant: Eat Sugar");

}

}

class Program

{

static void Main()

{

animal obj;

obj = new animal();

obj.eat();

Page 72: history of C# အရင္ဆံုး C# ဆိုတာ · PDF fileေစ်းေတာ္ေတာ္ ... ဒီေနရာမွာ ကၽြန္ေတာ္ တစ္ခုေျပာဖို႔က

obj = new dog(); //polymorphism

obj.eat();

obj = new ant();

obj.eat();

Console.Read();

}

}

__________________

This Lessons is Written by Ko Seven Lamp (http://sevenlamp.wordpress.com)