Data tidak selalu tiba dalam tipe yang sudah kita ketahui. Hasil pembacaan file, nilai dari pustaka lama, atau data yang disimpan dalam variabel object menyembunyikan tipe aslinya. Sebelum nilai itu dipakai, program perlu memastikan tipe aslinya terlebih dahulu. C# menyediakan empat operator untuk kebutuhan tersebut: is, as, typeof, dan sizeof.
Operator is: Memeriksa Tipe #
Operator is menguji apakah sebuah nilai bertipe tertentu dan menghasilkan bool. Operator ini juga mendukung pattern matching: bila pemeriksaan berhasil, nilai dapat langsung diikat ke variabel baru bertipe yang cocok; bentuk itu akan sering kita pakai bersama statement if di bagian control flow.
Operator as: Konversi yang Aman #
Operator as mencoba mengubah nilai ke tipe target. Bila tipe cocok, hasilnya nilai tersebut dengan tipe baru; bila tidak cocok, hasilnya null, bukan pesan galat. Operator as hanya berlaku untuk tipe reference dan tipe nullable.
typeof dan sizeof #
Operator typeof(Tipe) menghasilkan objek System.Type yang mendeskripsikan tipe tersebut, sedangkan sizeof(tipe) menghasilkan ukuran tipe dalam byte. Keduanya bekerja pada tipe, bukan pada nilai.
Contoh dan Bedah Baris #
object kotak1 = "Budi Santoso";
object kotak2 = 42;
Console.WriteLine(kotak1 is string);
Console.WriteLine(kotak1 is int);
Console.WriteLine(kotak2 is int);
string? sapaan = kotak1 as string;
Console.WriteLine(sapaan?.ToUpper());
object? angkaTeks = kotak2 as string;
Console.WriteLine(angkaTeks ?? "(null)");
Console.WriteLine(typeof(string));
Console.WriteLine(typeof(int));
Console.WriteLine(kotak2.GetType());
Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(decimal));
Console.WriteLine(sizeof(char));
Console.WriteLine(sizeof(bool));
Console.WriteLine(sizeof(double));Output yang Dihasilkan:
True
False
True
BUDI SANTOSO
(null)
System.String
System.Int32
System.Int32
4
16
2
1
8Mari kita telaah baris demi baris:
- Baris 1-2 (
kotak1,kotak2): Dua variabel bertipeobjectmenyimpan string danint; variabelobjectdapat menampung nilai dari tipe mana pun. - Baris 4-6 (
is):kotak1memang berisi string sehinggais stringbernilaiTrue;kotak1bukanint(hasilFalse);kotak2berisiintsehinggais intbernilaiTrue. - Baris 8-9 (
asberhasil):kotak1cocok denganstring, sehinggasapaanberisi teks dansapaan?.ToUpper()mencetakBUDI SANTOSO. - Baris 11-12 (
asgagal):kotak2berisiint, sehinggaas stringmenghasilkannulldan operator??menggantinya dengan"(null)". - Baris 14-16 (
typeofdanGetType):typeof(string)menghasilkanSystem.Stringdantypeof(int)menghasilkanSystem.Int32;kotak2.GetType()juga menjawabSystem.Int32karena method itu membaca tipe isi variabel saat program berjalan, bukan tipe yang tertulis di deklarasi. - Baris 17-22 (
sizeof): Ukuranintadalah4byte,decimal16byte,char2byte (Unicode),bool1byte, dandouble8byte.