C# တွင်unified type system ရှိသည်။ ၎င်းကိုCommon Type System (CTS) ဟုခေါ်သည်။
unified type system ဆိုသောကြောင့်type များအားလုံးinteger စသည် အခြေခံ type များအပါအဝင်System.Objecclass ၏subclass များဖြစ်သည်။ ထို့ကြောင့် မည်သည်မဆိုToString() method ရှိသည်။ သို့သော် စွမ်းရည်ကောင်းစေဖို့အတွက် ၎င်းprimitive types များကို object များကဲ့သို့ heap တွင် မထားပဲ stack တွင် ထားသည်။
CTS တွင် datatypes ကို အောက်ပါအတိုင်း ကဏ္ဍ နှစ်ခု ကွဲသည် -
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 တို့ ပါဝင်သည်။
C# သည်struct သုံး၍ user-definedvalue 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 ဆိုသည်မှာ value type တစ်ခု၏ value ကို ၎င်း၏ reference type အဖြစ်သို့ ပြောင်းခြင်းဖြစ်သည်။
Unboxing ဆိုသည်မှာ (အရင် box လုပ်ထားသော) reference type တစ်ခု၏ value ကို ၎င်း၏ value type အဖြစ်သို့ ပြောင်းခြင်းဖြစ်သည်။ ဥပမာ -
intfoo=42;// Value type.objectbar=foo;// foo is boxed to bar.intfoo2=(int)bar;// Unboxed back to value type.