C# menyediakan 16 tipe bawaan yang sudah terdefinisi, terbagi menjadi 13 tipe sederhana dan 3 tipe tidak sederhana. Semua nama tipe bawaan ditulis huruf kecil semua.
graph TD
A[Tipe Terdefinisi] --> B[Sederhana]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[Non Numerik]
B --> G[Numerik]
F --> H[bool]
F --> I[char]
G --> J[Bilangan Bulat]
G --> K[Titik Mengambang]
J --> L[8-Bit]
J --> M[16-Bit]
J --> N[32-Bit]
J --> O[64-Bit]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% Beri warna hijau pada node daun
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee9013 Tipe Sederhana
- Tipe numerik (total 11) bilangan bulat ada 8 jenis:
sbyte/byte, short/ushort, int/uint, long/ulongtipe titik mengambang ada 3 jenis:float, double, decimal(decimal khusus untuk perhitungan mata uang presisi tinggi) - Tipe non numerik (total 2):
char(karakter Unicode tunggal),bool(hanya bernilai true atau false)
Ciri khas: Berbeda dengan C/C++, nilai numerik di C# tidak bisa langsung dipakai sebagai syarat pengecekan boolean.
3 Tipe Referensi Tidak Sederhana
string (urutan karakter), object (kelas dasar semua tipe), dynamic (untuk interoperabilitas bahasa dinamis)
Tipe C# dan Tipe .NET
Semua tipe bawaan yang terdefinisi langsung memetakan ke tipe dasar .NET. Nama tipe di C# hanyalah alias dari tipe .NET yang bersesuaian, sehingga kode tetap bisa dikompilasi jika pakai nama kelas asli .NET, namun standar resmi tidak menyarankan cara ini. Saat menulis kode C#, gunakan alias kata kunci bawaan C# daripada nama kelas lengkap .NET.
Tipe Sederhana Terdefinisi
| Kata Kunci C# | Keterangan | Rentang Nilai | Tipe Dasar .NET | Nilai Bawaan |
|---|---|---|---|---|
| sbyte | Bulat bertanda 8-bit | -128 ~ 127 | System.SByte | 0 |
| byte | Bulat tak bertanda 8-bit | 0 ~ 255 | System.Byte | 0 |
| short | Bulat bertanda 16-bit | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | Bulat tak bertanda 16-bit | 0 ~ 65535 | System.UInt16 | 0 |
| int | Bulat bertanda 32-bit | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | Bulat tak bertanda 32-bit | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | Bulat bertanda 64-bit | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | Bulat tak bertanda 64-bit | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | Titik mengambang presisi tunggal | 1,5×10⁻⁴⁵ ~ 3,4×10³⁸ | System.Single | 0.0f |
| double | Titik mengambang presisi ganda | 5×10⁻³²⁴ ~ 1,7×10³⁰⁸ | System.Double | 0.0d |
| bool | Tipe boolean | true / false | System.Boolean | false |
| char | Karakter Unicode | U+0000 ~ U+FFFF | System.Char | \x0000 (karakter kosong) |
| decimal | Desimal presisi tinggi (28 digit signifikan) | ±1,0×10⁻²⁸ ~ ±7,9×10²⁸ | System.Decimal | 0m |
Tipe Tidak Sederhana Terdefinisi
| Kata Kunci C# | Keterangan | Tipe Dasar .NET |
|---|---|---|
| object | Kelas dasar semua tipe termasuk tipe nilai sederhana | System.Object |
| string | Teks yang terdiri dari nol atau lebih karakter Unicode | System.String |
| dynamic | Tipe dinamis untuk kompatibilitas rakitan bahasa dinamis | Tidak ada tipe .NET tetap yang bersesuaian |
int sama persis dengan System.Int32, dan string setara dengan System.String; kompiler mengenali dan saling menukar keduanya secara otomatis.
Aturan penulisan kode mewajibkan pakai kata kunci C# (gunakan int bukan Int32) agar kode lebih mudah dibaca.
Tipe sederhana juga disebut Tipe Nilai (Value Type)
Menyimpan satu nilai tunggal dan dialokasikan di memori stack;
Jika dideklarasikan tanpa pemberian nilai manual, akan otomatis diberi nilai bawaan yang tertera di tabel;
Semua tipe sederhana mewarisi langsung dari object dan mendukung operasi boxing/unboxing. (Dijelaskan di bagian selanjutnya)
Keluarga Tipe Bilangan Bulat
- Tipe awalan
u(uint/ushort/ulong/byte): tak bertanda, hanya bisa simpan bilangan non negatif; - sbyte/short/int/long: bertanda, bisa simpan bilangan bulat positif maupun negatif.
Keluarga Tipe Titik Mengambang
float: presisi tunggal, akhiranf. Presisi rendah tapi perhitungan cepat, cocok untuk grafis dan komputasi 3D;double: presisi ganda, akhirand. Tipe literal titik mengambang bawaan, umum untuk perhitungan sains;decimal: desimal presisi tinggi, akhiranm. Dirancang khusus untuk keuangan dan mata uang tanpa kehilangan presisi titik mengambang.
Tipe Boolean dan Tipe Karakter
bool: hanya dua nilai yang tersedia, tidak boleh konversi implisit dengan bilangan;char: menyimpan satu karakter Unicode, secara internal berupa bilangan bulat tak bertanda 16-bit.
Tipe Tidak Sederhana (Tipe Referensi Reference Type)
- object: kelas dasar utama, semua tipe nilai dan referensi turun darinya, inti mekanisme boxing;
- string: tipe referensi khusus, string bersifat tidak dapat diubah, string kosong
""adalah instansi bawaan yang valid; - dynamic: tidak ada pengecekan tipe saat kompilasi, anggota diselesaikan saat runtime. Tidak ada pemetaan .NET tetap, sering dipakai untuk integrasi bahasa dinamis Python/Ruby; mengorbankan keamanan kompilasi demi fleksibilitas.
static void Main(string[] args)
{
// 1. Bilangan bulat 8-bit
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. Bilangan bulat 16-bit
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. Bilangan bulat 32-bit
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. Bilangan bulat 64-bit
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. Tipe titik mengambang
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. Tipe boolean
bool flag = true;
// 7. Karakter Unicode
char ch = 'A';
// 8. Tipe tidak sederhana terdefinisi
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Code language: JavaScript (javascript)
Tipe Bawaan