C sharp (programming language)

Wikipedia မှ
ဤနေရာသို့သွားရန် - အ​ညွှန်း​, ရှာ​ဖွေ​ရန်​
C#
Paradigm structured, imperative, object-oriented
Appeared in 2001
Designed by Microsoft Corporation
Latest release 3/ 19 November 2007
Typing discipline static, strong, both safe and unsafe, nominative
Major implementations .NET Framework, Mono, DotGNU
Influenced by Object Pascal, C++, Modula-3, Java, Eiffel
Influenced Nemerle, D, Java[၁], Windows PowerShell

C# (C sharp ဟု အသံထွက်ရန်) သည် Microsoft မှ ပြုလုပ်သော .NET ကို ဦးတည်သည့် ECMA (ECMA-334) and ISO (ISO/IEC 23270) စံမှီ object-oriented programming language ဖြစ်သည်။ Delphi တီထွင်သူ Anders Hejlsberg ဦးဆောင်သော C# language သည် C++ ၏ object-oriented syntax ကို အခြေခံပြီး ရှင်းလင်းလွယ်ကူရေးအတွက် အခြား programming language များ (အထူးသဖြင့် Delphi နှင့် Java) ကိုလဲ တုယူထားသည်။

တည်ဆောက်ပုံ ရည်ရွယ်ချက်[ပြင်​ဆင်​ရန်​]

ECMA စံတွင် C# ၏ တည်ဆောက်ပုံ ရည်ရွယ်ချက် ကို အောက်ပါအတိုင်း ပြသည်။

  • C# သည် ရှင်းလင်းသော၊ ခေတ်မှီသော၊ ယေဘူယျသုံး၊ object-oriented programming language ဖြစ်သည်။
  • software ခိုင်မြဲမှု (robustness)၊ တာရှည်ခံခြင်း (durability) နှင့် ပရိုဂရမ်မာ ထုတ်လုပ်မှု မြင့်တင်စေရေးအတွက် strong type checkingarray bounds checking၊ မဖြစ်သေးသော ကိန်းရှင် များ သိခြင်း၊ source code portability၊ အလိုလျောက် garbage collection ပြုလုပ်ခြင်းတို့ ပါရှိရန်လိုသည်။
  • language တွင် distributed environment တွင်သုံးနိုင်သော software components ထုတ်လုပ်နိုင်ရန်။
  • C နှင့် C++ သုံးသော ပရိုဂရမ်မာများ ပြောင်းလည်းသုံးစွဲနိုင်မှု အရေးကြီးသော အချက်ဖြစ်သည်။
  • internationalization ရနိုင်မှုသည် အရေးကြီးသည်။
  • C# သည် hosted နှင့် embedded system များတွင် အသုံးပြုနိုင်ရန် အရေးကြီးသည်။
  • C# သည် memory နှင့် processing power သုံးစွဲမှုကို လျှော့ချရန် ရည်ရွယ်သော် လည်း C သို့မဟုတ် assembly language တို့နှင့် ယှဉ်ရန် မလိုပေ။

သမိုင်း[ပြင်​ဆင်​ရန်​]

.NET စလုပ်စဉ်တွင် class library များကို Simple Managed C (SMC) ခေါ် language/compiler သုံး၍ရေးသားခဲ့သည်။ ၁၉၉၁တွင် Anders Hejlsberg သည် Cool ခေါ် programming language ကို တည်တွင်ခဲ့သည်။ ၂၀၀၀ တွင် Professional Developers Conference (PDC) ၌ ထို programming language ကို C# ဟု အမည်ပေးခဲ့သည်။ ထို class library များနှင့် ASP.NET များကို C# သို့ ပို့ခဲ့သည်။

C# ဒီဇိုင်နာ ဖြစ်သော Anders Hejlsberg သည် Microsoft တွင် ထိပ်တန်း architect ဖြစ်ပြီး Visual J++, Borland Delphi နှင့် Turbo Pascal တို့၏ ဒီဇိုင်နာ တွင်လည်း ပါဝင်ခဲ့သည်။ သူ၏ အင်တာဗျူးနှင့် စာတမ်းများတွင် C++, Java, Delphi, နှင့် Smalltalk တို့၏ အားနည်းချက်များကို ဆွေးနွေးထားပြီး Common Language Runtime (CLR) အခြေခံ ဖြစ်ပေါ်ပုံကို တင်ပြထားသည်။ ထိုမှတစ်ဆင့် C# ဒီဇိုင်းလုပ်ခဲ့ခြင်းဖြစ်သည်။ အခြားသူများကမူ C# တွင် ထို programming language အပြင် အခြား programming language များကိုလည်း တုယူထားကြောင်း ငြင်းဆိုချက်များရှိသည်။

အသွင်လက္ခဏာများ[ပြင်​ဆင်​ရန်​]

ဒီဇိုင်းအားဖြင့် C# သည် Common Language Infrastructure (CLI) ၏ အတွင်းသဘော သဘာဝကို ဖေါ်ပြသော programming language ဖြစ်သည်။ C# ၏ အတွင်းခံ type များမှာ CLI framework ၏ အသီးသီး value-type များကို တည်ဆောက်ထားသည်။ သို့သော် C# language ဖေါ်ပြချက်တွင် compiler ၏ code generation လိုအပ်ချက်တွင် C# compiler သည် CLI နှင့် ကိုက်ညီရမည် ကိုလည်းကောင်း ၊ Common Intermediate Language (CIL) ကို ထုတ်လုပ်ရမည်ကိုလည်းကောင်း ဖေါ်ပြမထားပေ။ သီအိုရီအားဖြင့် C# သည် C++ နှင့် Fortran တို့ကဲ့သို့ machine code များ ထုတ်လုပ်နိုင်သော်လည်း လက်တွေ့တွင်မူ CIL ကိုသာ ရည်ရွယ်သည်။

C# သည် C နှင့် C++ တို့နှင့် ခြားနားသလောက် Java နှင့် တူသည်။ ၎င်းတို့မှာ -

  • global ကိန်းရှင် သို့မဟုတ် ဖန်ရှင် ဟူ၍မရှိပေ။ အားလုံးသော method နှင့် member များကို class ထဲတွင် ကြေငြာရမည်။ သို့သော် public class များ၏ static method/variable များ အဖြစ်နှင့်မူ global ဖန်ရှင်/ကိန်းရှင် အစားရနိုင်သည်။
  • C နှင့် C++ တို့နှင့် မတူပဲ local variable များကို enclosing blog အတွင်း shadow variable အဖြစ် လုပ်၍မရပေ။ Variable shadowing ကို C++ ရေးထုံးများတွင် ရောင်တွေးစေတပ်ကြောင်း ဖေါ်ပြသည်။
  • C# သည် တိကျသော boolean type bool ကို အသုံးပြုသည်။ while နှင် if တို့ကဲ့သို့ ရွေးချယ်ချက်လိုသော အကြောင်းများတွင် boolean type လိုအပ်သည်။ C++ တို့တွင် boolean type အစား ကိန်းဂဏန်းတို့ကိုလည်း အသုံးပြုနိုင်သည်။ ဥပမာ if(a) တွင် a သည် bool အဖြစ်ပြောင်းရန်သာလိုသောကြောင့် a သည် int သို့မဟုတ် pointer လည်း ဖြစ်နိုင်ပေသည်။ C# သည် int ဆိုသည်မှာ မှန်သည် မှားသည် ဟု အဓိပ္ပါယ်မရပေ။ ထို့ကြောင့် = အစား == သုံးသော if (a = b) ဆိုသော တွေ့နေကြ အမှားများ ကင်းလေသည်။
  • C# တွင် unsafe ဟုပြထားသော block အတွင်းမှလွဲ၍ memory address pointer များကို သုံးမရပေ။ unsafe ကုတ်ပါသော ပရိုဂရမ် များသည်လည်း run ရန် အထူး အခွံ့လိုသည်။ unsafe pointer များသည် value-type, array, string သို့မဟုတ် stack တွင် ထားသော မက်မိုရီ ပို point လုပ်ထားနိုင်သည်။ unsafe အဖြစ် လုပ်မထားသော C# ကုတ်သည် System.IntPtr သုံး၍ pointer များကို သုံးနိုင်သော်လည်း ၎င်းတို့ကို dereference ကား လုပ်၍မရပေ။
  • Managed memory များကို free လုပ်၍မရပေ။ အလိုလျရောက် garbage collected ဖြစ်မည်။ Garbage collection ကြောင့် memory leaks ဖြစ်နိုင်သည်။ C# သည် using ကိုသုံး၍ finalization တွင်သေချာရန် ကုတ် ထဲ့နိုင်သည်။
  • C# တွင် interface များစွာကို implement လုပ်နိုင်သော လည်း multiple inheritance ကား မရပေ။ ၎င်းအချက်မှာ C# ကို ဒီဇိုင်လုပ်စဉ်ကပင် ဆုံးဖြတ်ခဲ့သော dependency hell ကို ကာကွယ်ရန်ဖြစ်ပြီး CLI အဘောတယားတွင် ရှင်းလင်းစေသည်။
  • C# သည် C++ ထက် typesafe ဖြစ်စေသည်။ မူလ ပါဝင်သော type conversion များတွင် အန္တရာယ် မရှိသော အပြောင်းများသာ ခွံ့ပြုသည်။ ဥပမာ integer တို့တွင် ပို၍ ကြီးမားသော type သို့ပြောင်းခြင်းမျိုး၊ derived type မှ base type သို့ ပြောင်းခြင်းမျိုးတို့ ဖြစ်သည်။ ၎င်းတို့ကို compile-timeJIT အတွင်း နှင် တစ်ခါတစ်ရံ runtime တွင် အတည်ဖြစ် (enforce) စေသည်။ boolean နှင် integer သော်လည်းကောင်း enumeration member နှင် integer သော်လည်းကောင်း မူလ အပြောင်း (implicit conversion) မရှိချေ။
  • Enumeration member များကို ၎င်းတို့၏ namespace တွင် သီးသန့် ထားရှိသည်။
  • Accessor များဖြစ်သည့် Property များသည် C++ member field access များကဲ့သို့ object အတွင်းပိုင်းကို ပြောင်းလဲစေနိုင်သည်။ C++ တွင် member တစ်ခုကို public အဖြစ်ကျေးညာခြင်းဖြင် ထို member ကို ရေးဖတ်ခွံ့ ပေးနိုင်ပြီး ပို၍ အသေးစိတ် ထမ်းချူပ်ရန် အတွက်မူ accessor method များကိုသုံးလေသည်။ C# တွင် Property သည်ပင် member access ကို ထမ်းချူပ်နိုင်ပြီး စစ်စေးနိုင်သည်။
  • ရှာဖွေနိုင်သော reflection အားလုံးရှိသည်။
  • ယခု C# တွင် reserved words ရ၇ လုံး ရှိသည်။

Common Type system (CTS)[ပြင်​ဆင်​ရန်​]

C# တွင် unified type system ရှိသည်။ ၎င်းကို Common Type System (CTS) ဟုခေါ်သည်။

unified type system ဆိုသောကြောင့် type များအားလုံး integer စသည် အချေခံ type များအပါအဝင် System.Objec classsubclass များဖြစ်သည်။ ထို့ကြောင့် မည်သည်မဆို ToString() method ရှိသည်။ သို့သော် စွမ်းရည်ကောင်းစေဖို့အတွက် ၎င်း primitive types များကို object များကဲ့သို့ heap တွင် မထားပဲ stack တွင် ထားသည်။

Datatype အမျိုးအစားများ[ပြင်​ဆင်​ရန်​]

CTS တွင် datatypes ကို အောက်ပါအတိုင်း ဂံတ နှစ်ခု ကွဲသည် -

  • Value Type
  • Reference Type

value type များကို ၎င်း၏ တန်ဖိုးကိုသာ stack ၏ မက်မိုရီ တွင် သိုလှယ်ထားပြီး reference type များသည် ၎င်းတန်ဖိုးထားရှိပါ မက်မိုရီ နေရာကိုသာ သိမ်းထားသည်။ Value type တွင် integers (short, long), floating-point numbers (float, double), decimal (a base 10 number), structures, enumerations, booleans and characters တို့ပါဝင်ပြီး Reference Type တွင် objects, strings, classes, interfaces and delegates တို့ ပါဝင်သည်။

User-defined datatypes[ပြင်​ဆင်​ရန်​]

C# သည္ struct သုံး၍ user-defined value types မ်ား လုပ္နိုင္သည္။ Programmer အတြက္မူ ၎သည္ class အေပါ့စားမ်ား အျဖစ္သုံးနိုင္သည္။ သာမန္ class မ်ားႏွင္႔မတူပဲ standard primitives မ်ားကဲ့သို႔ ၎တို႔ကို heap မွာ မထားပဲ stack မွာ ထားသည္။ ၎သည္ object ၏ အစိတ္ပိုင္း သို႔မဟုတ္ array တြင္လည္းေကာင္း အသုံးျပဳနိုင္ၿပီး သာမန္ class object မ်ားကဲ့သို႔ memory indirection မလိုအပ္ေပ။ struct သည္ မ်ားစြာေသာ အားနည္းခ်က္မ်ားရွိသည္။ struct တြင္ null တန္ဖိုး မရွိေသာေၾကာင့္ array တြင္ initialize မလုပ္ပဲ သုံးနိုင္သည္။ ၎တန္ဖိုးမ်ားကို သုံးည ျဖင့္ေျဖဩားမည္ျဖစ္သည္ (၎တန္ဖိုးမ်ားကို ေျပာင္း၍လည္း ရပါသည္)။ ပရိုဂရမ္မာ အေနျဖင့္ argument တစ္ခုႏွင့္ အထက္ ပါ struct constructor မ်ား ျပဳလုပ္နိုင္သည္။ အေၾကာင္းမွာ struct သည္ virtual method table မရွိျခင္းေၾကာင့္ျဖစ္ၿပီး ၎ေၾကာင့္ပင္ inheritance မရနိုင္ေပ။ သို႔ေသာ္ interface ကိုေတာ့ implement လုပ္နိုင္သည္။

Boxing and unboxing[ပြင်​ဆင်​ရန်​]

Boxing ဆိုသည်မှာ value type တစ်ခု၏ value ကို ၄င်း၏ reference type အဖြစ်သို့ ပြောင်းခြင်းဖြစ်သည်။

Unboxing ဆိုသည်မှာ (အရင် box လုပ်ထားသော) reference type တစ်ခု၏ value ကို ၄င်း၏ value type အဖြစ်သို့ ပြောင်းခြင်းဖြစ်သည်။ ဥပမာ -

int foo = 42; // Value type.
object bar = foo; // foo is boxed to bar.
int foo2 = (int)bar; // Unboxed back to value type.

Features of C# 2.0[ပြင်​ဆင်​ရန်​]

ကိုးကား[ပြင်​ဆင်​ရန်​]

  1. In Java 5.0, several features (foreach, autoboxing, varargs, attributes and enums) were introduced, after proving themselves useful in the C# language (with only minor differences in name and implementation). [၁][၂]