Archive

Posts Tagged ‘C#’

C# and .Net Framework နဲ႕ မိတ္ဆက္ေပးျခင္း

June 25, 2010 1 comment

IT နယ္ပယ္က ညီကိုေမာင္ႏွမေတြ အားလုံးပဲ မဂၤလာပါလို႕ ႏွုတ္ခြန္းဆက္သလိုက္ပါတယ္..။ က်ေနာ္ သိတာေလးနဲနဲေလာက္ တင္ျပ ခြင့္ျပဳပါ။ က်ေနာ္ စာအေရးသားတင္ျပမွဳ ညံ့တဲ့အတြက္ သီး(သည္း)ခံခြင့္လြတ္ေပးက်ဖို႕ ေတာင္းဆိုပါရေစ…။ က်ေနာ္ကြန္ပ်ဳတာနဲ႕စတင္ထိေတြ႕ခြင့္ရတာ မၾကာေသးပါဘူး။ က်ေနာ္လည္းေက်ာင္းသားတဦးပါ။  အမွားမ်ားရွိရင္ျပင္ဆင္ သင္ၾကားေပးၾကပါလို႕ ေတာင္းဆိုပါရေစ။  က်ေနာ္က Professional တေယာက္မဟုတ္သလို .Net ပိုင္းကလည္းမဟုတ္ေတာ့ အမွားမ်ားရွိခဲ့လ်ွင္  တိတ္တိတ္ေလးမေနပဲ ေထာက္ျပေပးခဲ့ပါလို့ သိခ်င္တာရွိမ်ား ရွိခဲ့လ်င္  ေမးခဲ့ပါ အတူတူ ေလ့လာေျဖရွင္းက်တာေပါ့။ သိတဲ့အကိုေတြ အမေတြေျဖၾကားေပးပါလိမ့္မယ္…။

ဒီပို႕စ္ေလးရဲ႕ ရည္ရြယ္ခ်က္ကလည္း စတင္မိတ္ဆက္ေပးျခင္းဆိုေတာ့ မိတ္ဆက္သေဘာပါ က်န္တာေတြကိုယ့္ဖာသာေလ့လာရမယ္ေနာ္ ..။

ကဲ ဒီအေၾကာင္းဖတ္မယ္ဆို programming အေျခခံနဲနဲ ရွိထားရင္ .Net language တခုခု (သို႕) Java ေလ့လားထားဖူးရင္ေတာ့
နားလည္လြယ္က်မွာပါ.။ က်ေနာ္ စတင္ရြီးပါျပီ အဲ စတင္ေဆြးေႏြးလိုက္က်ရေအာင္…။

က်ေနာ္ C# ကိုမေျပာခင္ .Net ကို နဲနဲ အရင္ ေျပာခ်င္ပါတယ္။ Java နွင့္ လည္း ႏွုိင္းယွဥ္ေဆြးေႏြးေပးသြားပါ့မယ္။က်ေနာ္ သိသေလာက္ကေတာ့   .Net က O/S (Operation System ) ေရြးပါတယ္။ Microsoft (Windows) Platform ပဲ run လို႕ရပါတယ္ ။ဒါေျကာင့္မို့ .Net ဟာ OS independent မျဖစ္ပါဘူး။ Java ကေတာ့ အဲလိုမဟုတ္ပဲ O/S ကိုမေ၇ြးပါဘူး။ ဘာေၾကာင့္လဲဆိုေတာ့သူမွာ JVM ဆိုတဲ့ Java Virtual Machine ရွိေနလို႔ပါပဲ။  Java program ဟာတစ္ၾကိမ္ေရး ျပီး source code(exmpale.java) ကို compile(example.class) လုပ္ျပီးရင္ JVM ရွိတဲ့ၾကိဳက္တဲ့ O/S run ပါ။  JVM ေတာ့ ကိုသုံးမယ့္စက္မွာ တင္ထားရမွာေပါ့။ WORM (Write Once Read Many) ဆိုေတာ့ OS independent ျဖစ္တာေပါ့ဗ်ာ ။

အဲ ဒါနဲ႕ OS ဆိုတာေတြကေတာ့ ဥပမာ အားျဖင့္ ဒီလိုမ်ုိး အမ်ုိးစားေတြ (XP, Vista, Windows 7), Linux ( Fedora,

Ubuntu..etc) ,Solaris and Macintosh (OS X) ရွိပါတယ္။ ကဲထားပါေတာ့ လမ္းေတြလဲ လြဲကုန္ျပီ ေျပာခ်င္တာကမ်ားေနေတာ့။ အႏွစ္ခ်ဳပ္ကေတာ့ဗ်ာ .Net က O/S လြပ္လပ္မွမရွိဘူး၊ java က ရွိတယ္ ကဲဟုတ္ျပီေနာ္။
မွတ္ခ်က္။ ။ ခုေတာ့ အျခား platform

က်ေနာ္ ပထမပိုင္းမွာတုန္းက .Net Framework က OS independent ျဖစ္ေၾကာင္းေဆြးေႏြးခဲ့ပါတယ္ အခုေနာက္ထပ္ေဆြးေႏြးမွဳလုပ္ပါမယ္..။
ေနာက္တခ်က္ေျပာမယ္ .Net က Language Independent ရွိတယ္သူ႕မွာ ၾကိဳက္တဲ့ Language လာေရး Framework စည္း မ်ည္းကိုလိုက္နာတဲ့ ဘယ္
Language မဆို ကဲဗ်ာ VB.net 2005 နဲ႕ေရးမလား VC++.net 2003 ,C# ၾကိဳက္တာနဲ႕ေရး
Framework ေပၚမွာ ..။ေျပာခ်င္တာေတာ့ဗ်ာ Framework ေပၚမွာ programming language ေတြ
အမ်ားၾကီးေရးလို႕ရတယ္ ေပါ့။ java မွာေတာ့မရဘူးေလေနာ္ java ကသူ႕ ရဲ႕ ေပၚမွာ java
language တခုတည္းပဲေရးလို႕ရတယ္ေလ.. ျပီးေတာ့ Compile လုပ္ျပီး ေတာ့ executable
ျဖစ္တာပဲေလ ။

အႏွစ္ခ်ဳပ္ရရင္ေတာ့ .Net Framework က language ေရြးခ်ယ္မွုူ မရွိဘူး ။ java မွာေတာ့ရွိတယ္။

.Net Time Line History


ဒီလိုထြက္ရွိခဲ့ပါတယ္.။။

Microsoft .Net Framework

.Net Framework

ကေနျပီးေတာ့ Webservice ,Webforms နဲ႕ WindowsForms ေတြကိုလုပ္ဆိုင္ႏုိ္င္တယ္ အေပၚက LAYER ေတြကိုၾကည့္ရင္ျဖစ္ ျမင္ႏုိင္နားလည္ႏုိင္မယ္လို႕ျမင္ပါတယ္။
Framework မွာ Data and XML classes ,FBC (Frame Base Class) ေတြ CLR (Common Language Run time) ေတြပါ၀င္ပါတယ္။
Data Base နဲ႕သက္ဆိုင္တဲ့ function ေတြ စတာေတြထည့္ထားတာေပါ့ (ADO.net တို႕ SQL စတာေတြေပါ့ ) တခါတည္းၾကိဳေရးထားတာေပါ့..။ က်ေနာ္တို႕ Web ဆိုဒ္မွာ အသင္း၀င္ရင္ဗ်ာ user name , password စတာေတြရိုက္ထည့္ရတယ္ဗ်ာ ဒါေတြကိုေနာက္တၾကိမ္၀င္ရင္ မွန္မွန္စစ္ဖို႕ Database မွာသြားသိမ္းရတယ္ေလ
အဲလိုသိမ္းဖို႕ database နဲ႕ခ်ိတ္ဖို႕လိုတဲ့ classes ေတြဆုထားတဲ့ ဟာေတြ
ပါတယ္ေပါ့ဗ်ာ .Net frameworkၾကီးမွာေပါ့။ XML ကေတာ့ထပ္ခါထပ္ခါသုံးလို႕ရတဲ့ data ေတြ သုံးတယ္ သူက database ထပ္ေပါ့တယ္.။ဒီေတာ့ ေဒတာေတြကို database
မလိုပဲသိမ္းလို႕ရတဲ့အခါမ်ဳိးမွာ သူ႕ကိုသုံးတယ္ သူက text ဖိုင္အေနနဲ႕သိမ္းတာကိုး
HTML နဲ႕ နဲနဲဆင္တယ္ဗ်.။ ဒါေတြက Framework ထဲမွာ ပါတယ္ ဒီလိုေတြဆုထားလို႕ .NetFramework လို႕ေျပာတာေပါ့ က်ေနာ္တို႕လိုရင္ေခၚသုံးမယ္ အဲ Framework ထဲက classes ေတြကိုေပါ့…။

Frame Class Library

¢ FCL contains thousands of classes to provide access to Data Access,    String Manipulation, Collections, IO, Streams, Threads, Security, Network Programming, Window Programming, Web Programming.
¢ These thousand of classes are hold in namespace.
¢ All these classes are OO design and fully extensible.
¢ You can also apply inheritance and polymorphism to these classes.

ဟီး ျမန္မာလိုေရးရင္ေတာင္လိုရင္း ေရာက္မယ္မထင္ဘူး ။ အင္းအေပၚကေျပာသလိုေပါ့ဗ်ာ FCL ဆိုတာလည္း .Net ရဲ႕ Framework ထဲမွာ ပါ၀င္တဲ့ classes library အစုေ၀းၾကီးပါပဲ သူမွာ classes ေပါင္းေျမာက္မ်ားစြာပါ၀င္ပါတယ္ သူေထာက္ပံ့ေပးတဲ့ေတြကေတာ့ဗ်ာ Data Access, String Manipulation, Collections, IO, Streams, Threads, Security, Network Programming, Window Programming, Web Programming. ေတြပါပဲ…။ Namespace ေအာက္မွာ က်ေနာ္တို႕ class ေတြအမ်ားၾကီးတည္ ေဆာက္လို႕ရပါတယ္…classes ေတြအားလုံးက OOP (Object Orient programming) ေတြပါ ဒါေၾကာင့္ က်ေနာ္တို႕ inheritance , polymorphism and encapsulation ဆိုတဲ့လုပ္ေဆာင္ခ်က္ေတြ လုပ္ေဆာင္ႏုိင္တယ္ေပါ့ဗ်ာ ။
Inheritance ဆိုတာကေတာ့ဗ်ာ ဥပမာ က်ေနာ္က class တခုေဆာက္လိုက္မယ္ student ဆိုတဲ့ classes ေပါ့

Student

{
Name:
NRC:
Address:
}

ေတြပါမယ္ေပါ့ဗ်ာ က်ေနာ္ကေအာက္မွာ Employee နဲ႕ Teacher ဆိုတာကိုထပ္ေဆာက္မယ္ ဒီလိုတည္ေဆာက္တဲ့အခါမွာလည္း အေပၚက student classes ထဲက member ေတြလိုပဲလိုခ်င္တယ္ဆိုပါေတာ့ ဒီေတာ့ အဲလိုထပ္ထပ္ျပီးမေရးေနေတာ့ပဲ က်ေနာ္က student classes ကို အေမြဆက္ခံမယ္ဗ်ာ
Employee: Student

Teacher: Student ဒါဆို student မွာပါတာေတြလည္းသူတို႕မွာပါျပီေပါ့ ဒါကိုေျပာတာပါ….
Encapsulation ဆိုတာကေတာ့ တကယ့္source ကို အုပ္ထားျပီး အျပင္က properties ပဲျပထားတာေပါ့..capsu ဆိုတာၾကားဖူးမွာေပါ့ ေဆးေတာက္ေတြေလ အထဲကေဆးမွုန္႕မွုရင္းကို အျပင္က အခြံေလးနဲ႕အုပ္ထားတာပါ ဒီလိုပုံစံေပါ့ ။(ဟီး ဆိုင္ေတာ့ဆိုင္ဘူး ဗဟုသုတေျပာအုံးမယ္ အဂၤလိပ္ေဆးက ကပ္ဆူးေတာင့္ခြံကို ဂဏာန္းေကာင္ရဲ႕ အခြံေတြနဲ႕ျပဳလုပ္တယ္လို႕ Chemistry စာအုပ္ေတြမွာဖတ္ခဲ့ဖူးတယ္)

Poly ကေတာ့မူကြဲပုံစံေတြပါ

က်ေနာ္ေျပာခ်င္တာေတြမ်ားျပီးလိုရင္ေခ်ာ္ေခ်ာ္ထြက္တက္လို႕ အားနာတယ္ဗ်ာ..။ က်ေနာ္ရွင္းတာ အခ်ိတ္ဆက္ေတာ့မိမယ္မထင္ဘးူး ဟီး နဲနဲေတာ့ သီးခံေပးၾကပါဗ်ာ က်ေနာ္မေရးတက္ဘူးဗ် တင္ျပပုံစံကို။
Class library ကိုေတာ့အၾကမ္းမ်ဥ္းနားလည္ႏုိင္မယ္လို႕ ေမ်ွာ္လင့္ပါတယ္။

Common Language Run-Time (CLR)

က်ေနာ္တို႕ ဒီမွာၾကည့္လိုက္ေတာ့ ထူးျခားတာေလး တခုေတြ႕မိလားဗ် ။ ဒါကေတာ့ Compiler ၂ ခါလုပ္တာပါ..
ဘာလို႕လုပ္ရသလဲဆိုေတာ့ က်ေနာ္တို႕က .Net Framework မွာ ၾကိဳက္တဲ့ Language နဲ႕ေရးလို႕ရတယ္ဆိုေတာ့ Compile လုပ္တဲ့အခါ syntax ေတြမတူတာေတြကိုၾကားက ေန Compile လုပ္ဖို႕တခုခုလိုအပ္ေနတာပါ။ က်ေနာ္ဆိုလိ္ုခ်င္တာကေတာ့ဗ်ာ က်ေနာ္တို႕

Visual Studio.Net မွာ Integer variable ကိုေၾကျငာေတာ့ Dim num1 as Integer လို႕ေၾကျငာတယ္ အုိေက။

C# မွာေတ့ Int num1; ဆိုျပီးေတာ့ေၾကျငာတယ္ ။။။ အဲလို မတူတဲ့ Syntax ေတြကို အရင္ဆုံး CLR နားလည္မည့္ code ရေအာင္ က်ေနာ္တို႕ၾကားမွာ Compile လုပ္ရတယ္ဗ်ာ ၾကိဳက္တဲ့ Language နဲ႕Framwork ေပၚမွာ ေရးလာခဲ့ဗ်.. Integer ပဲျဖစ္ျဖစ္ Int ပဲျဖစ္ျဖစ္ ေရးလာခဲ့ဗ်ာ သူက အရင္ဆုံ နားလည္တာ ကေတာ့ Integer32 (4byets )ဆိုျပီးေတာ့ပဲသိတယ္ ဘုံအေနနဲ႕ သူက ေျပာင္းေပးလိမ့္မယ္ဗ် Integer32 ဆိုျပီးေတာ့ေပါ့ ဒီိလိုေျပာင္းလိုက္လို႕ရလာတာက IL (intermediate Language Code ) ပါ သူ႕ကို Common language Runtime မွာပါတဲ့ JIT (Just In time ) က compile လုပ္မွ သာ exe ဖုိင္ေလးရျပီး Native code ေလးရျပီး CPU က interpret လုပ္ျပီး OS နားလည္တဲ့ code ရပါတယ္.။
Assembly (DLL files)
IL (intermediate language code ) နဲ႕ Metadata ၂ ခုကို က်ေနာ္တို႕ MSIL (Microsoft Intermediate Language) လို႕ေခၚပါတယ္ ဒါကိုက်ေနာ္တို႕က .dll (dynamic link library) ဖိုင္နဲ႕သိမ္းပါတယ္ ( Assembly )လို႕ေခၚတယ္။
Assembly မွာ private နဲ႕ Global ရွိတယ္။
Metadata

(က်ေနာ္တို႕ C# နဲ႕ေရးထားတာကိုဘယ္လိုျပန္ထားတယ္ Int ကေန Integer32 ကိုေျပာင္းထားတယ္ စသည့္ျဖင့္ သတင္းအခ်က္လက္ေတြထည့္ေပးလိုက္တာပါ.)
Metadata accurately describes all the classes you wrote and how they are structured. All of the classes methods and variable information is fully described in the metadata.

Private Assembly

ကေတာ့ က်ေနာ္တို႕ ေရးျပီးတာနဲ႕ က်ေနာ္တို႕ရဲ႕ application ဖိုဒါေအာက္မွာက်ေနပါျပီ၊ ဒီ application တခုမွာပဲသုံးလို႕ရမွာပါ။ (You make your code available to a single application in the same directory as your assembly.)

Global Assembly
ဆိုတာကေတာ့ ဒီဖိုင္ကိုပဲ အျခား application ကသုံးလို႕ရတယ္ ဒီဖိုင္ေလးပဲ ေကာ္ပီထည့္ေပး၇င္ေတာင္ရတယ္။(If you want to share your code among many applications, you have to consider deploying your code as a global assembly.)

Just In Time (JIT) In CLR

CLR ထဲမွာပါတဲ့ JIT (just in time)compiler ဟာ IL code ကို native code
အျဖစ္ compile လုပ္လိုက္ပါတယ္ ဒီအခါမွာ OS က နားလည္တဲ့ exe file
ကုိထုတ္ေပးပါတယ္။။။

Garbage Collector (GC)

ြGarbage Collector ကေတာ့ memory manage လုပ္တဲ့သူပါ.. .Net platform
မွာပါ၀င္ပါတဲ့ေကာင္းတဲ့အခ်က္တခုပါပဲ အရင္ကေတာ့ C++ မွာ မပါ၀င္ဘဲ C#
မွာေတာ့ရပါတယ္ C++ မွာအရင္ကဆိုကိုတိုင္ Memory manage အတြက္ ေရးေပးရပါတယ္။
အခုခါမွာ .Net framework ၾကီး ၾကီးလာတာနဲ႕အမ်ွ ပိုေကာင္းတဲ့ feature
ေတြပါ၀င္လာပါတယ္.။ Memory manage လုပ္တယ္ဆိုတာကေတာ့ဗ်ာ RAM ေပၚမွာ
မလိုအပ္ပဲရွိေနတဲ့ဖိုင္ေတြ အလုပ္လုပ္ဖို႕မလိုပဲေနရာယူေနတဲ့ဖိုင္ေတြကို
automatically ရွင္းလင္းေပးပါတယ္။ ဒီေတာ့ RAM မွာ မလိုအပ္တဲ့ဖိုင္ေတြ
variable ေတြမရွိေနေတာ့တဲ့တြက္ performance ကလည္းတက္လာမွာပါ..။

.NET IDE (Integrated Development Environment)

IDE ေတြ ေကာင္းလာတာေတာ့အမွန္ကိုပါပဲ Microsoft ရဲ႕ IDE ကို တျခား Platform
ေတြမယွဥ္ႏုိင္တာ
ေတာ့အားလုံး၀န္ခံၾကမယ္ထင္ပါတယ္..(သူ႕ရဲ႕အားသာခ်က္ကလည္းေနာက္ပိုင္း
အားနည္းခ်က္ေတြျဖစ္လာခဲ့တာပါ) ကိုယ္တိုင္ ေသခ်ာမတက္ကၽြမ္းေတာ့လို႕ပါ..IDE
က Developer ေတြကို အရမ္းကိုကူညီပါတယ္ ဥပမာဗ်ာ..
.Net framework မွာ Keyword and syntax ေတြကို အေရာင္ေလးေတြနဲ႕
highlighting ျပေပးတယ္ (ဒီေတာ့ identifier ေတြ ေပးတဲ့အခါမွာ
မွားစရာမလိုေတာ့ဘူးဗ်ာ ) case sensitive ျဖစ္မွုကို
ေလွ်ာ႕ခ်ႏုိင္တာေပါ့ဗ်ာ။
ေနာက္ drag and drop ေတြလုပ္ႏုိင္လာတယ္ဗ်ာ java မွာဆို button ကို
ကိုယ္တုိင္ေရးေနရေပမယ့္ .net မွာ drag and drop လုပ္ယုံနဲ႕
လုပ္လို႕ရေနပါျပီ end user
ေတြေတာင္နဲနဲျပရင္လုပ္တက္လာႏုိင္ေလာက္ေအာင္လြယ္ကူလာပါတယ္…က်ေနာ္တခါ က
PHP နဲ႕ ASP တို႕အားျပိဳင္တဲ့ပြဲတခုတက္ဖူးတယ္ အဲပြဲမွာတုန္းက PHP က
database နဲ႕ web page ကိုခ်ိတ္ဆက္ဖို႕ coding 6 lines ေလာက္ေရးရပါတယ္..
ဒါေပမယ့္ .Net မွာေရးရင္ေတာ့သူ႕ထက္မ်ားမွာပါ ဒီေတာ့ ပြဲမွာ
အႏုိင္ရဖို႕အတြက္ .Net ကအကိုေတြက က်ေနာ္တို႕ coding လုံး၀မေရးပဲ database
နဲကခ်ိတ္ျပမယ္လို႕ ေျပာပါတယ္ ။ ပရိတ္သတ္ကလည္းဗ်ာ စိတ္၀င္စားတာေပါ့ သူက
.Net ရဲ႕ အားသာခ်က္ျဖစ္တဲ့ IDE ကိုသုံးျပီးလုပ္ခ်သြားတာ database မွာ
table ေဆာက္တယ္ ျပီးေတာ့ Web page ကေန Table ကို
လမ္းေၾကာင္းေရြးျပီး(BROWSE ) ဆိုတာေလးႏွိပ္ျပီးလုပ္သြားတာ coading
ေတာင္မလိုလိုက္ဘူး ဗ်ာ…ေရးခ်သြားတာ…ဒီေတာ့ IDE ကဘယ္ေလာက္ေတာင္
Developer ေတြကိုကူညီတယ္ဆိုတာနားလည္ေလာက္မွာပါ..။ (သူကိုတုိင္လည္း IDE ကို
အားမေပးခဲ့ပါဘူး ေသခ်ာေလ့လာဖို႕ဆုိရင္ ေတာ့ C++ လို အေျခခံကေလ့လာျပီး
လုပ္ဖို႕ေတာ့ေျပာၾကားခဲ့ပါတယ္ အဲလုပ္ငန္းခြင္က ၀င္ဖို႕ ၂ လ ၃
လသာလိုတယ္ဆိုရင္ေတာ့ IDE ကိုေလ့လာျပီး၀င္ ျပီးမွေသခ်ာသိေအာင္ေလ့လာေပါ့ဗ်ာ)
ေနာက္ျပီး error ေတြရွိရင္လည္း
တြန္႕လိုင္းေလးနဲ႕တြန္႕ျပေတာ့အမွားရွာရလြယ္ကူတယ္ (ေနာ္က Break line )
နဲ႕လည္းေသခ်ာ စစ္ေဆးႏုိင္တယ္ေလ.။ကိုက method တခုခုရိုက္လိုက္တာနဲ႕
သူ႕နဲ႕သက္ဆိုင္တဲ့ Methods ေတြက်လာတယ္ ျပီးေတာ့ ကိုကေရြးခ်ယ္ဖို႕ space
ေလးပုပ္ေပးလိုက္တာနဲ႕ အုိေကေနျပီေလ ။ case sensitive ကိုလုံး၀
ေလ်ွာ႕ခ်ႏုိင္ျပီေလ ။အမွားရွာရင္လည္း IDE ရဲ႕အားကိုးနဲ႕ debugging
ေကာင္းေကာင္းလုပ္လာႏုိင္ပါတယ္ …။MSDN (Microsoft Development Network
Library ) ၾကီးေပါ့ဗ်ာ။

ေလးစားစြာျဖင့္
ရဲပိုင္ျဖိဳး

Categories: .Net Tags: , ,