Inferensi Tipe dan Kata Kunci var
Perhatikan kode di bawah ini. Tipe data yang tertulis di awal deklarasi variabel bisa dideteksi secara otomatis oleh kompiler melalui nilai inisialisasi di sebelah kanan tanda sama dengan. Misalnya, apakah angka 18 dapat disimpulkan sebagai bilangan bulat int, dan Phone() dapat dikenali sebagai tipe Phone?
static void Main( )
{
int age = 18; // Nilai 18 di kanan langsung disimpulkan sebagai int
Phone p = new Phone(); // Konstruktor di kanan mengembalikan objek Phone
}
Code language: C# (cs)
Jadi, apakah kode di atas masih bisa disederhanakan?
Bahasa C# menyediakan kata kunci var untuk memperpendek penulisan dan menggantikan penulisan tipe secara eksplisit.
static void Main( )
{
var age = 18;
var p = new Phone();
}
Code language: JavaScript (javascript)
Di kode ini semua variabel di sebelah kiri menggunakan var. Kompiler akan menentukan tipe data berdasarkan ekspresi di sebelah kanan. Setelah dikompilasi, kedua potongan kode ini sama persis.

Catatan Penting
varbukan tipe dinamis, hanya bentuk singkat sintaks. Kompiler akan mengunci tipe yang diinferensikan saat kompilasi dan tidak bisa diubah lagi; kedua kode memiliki makna yang sepenuhnya setara.- Aturan wajib saat menggunakan
var:- Hanya dapat digunakan pada variabel lokal, tidak boleh digunakan untuk field kelas
- Saat mendeklarasikan variabel harus disertai nilai awal, tulisan
var x;saja tidak diperbolehkan - Tipe hasil inferensi bersifat tetap, variabel tidak bisa menyimpan data dengan tipe lain setelahnya
- Perbedaan penting:
varmilik C# ≠varmilik JavaScript. var di JavaScript menggunakan tipe dinamis lemah, variabel bisa berganti tipe kapan saja. var di C# hanyalah singkatan untuk tipe statis kuat dan tidak mengubah sifat C# sebagai bahasa tipe kuat.
Artinya, pada tahap kompilasi, kompiler membaca bagian kanan lalu menetapkan tipe age sebagai int dan tipe p sebagai Phone. Hasil akhirnya sama persis dengan kode pertama.
Tipe variabel tidak dapat diubah setelah itu. Berikut contohnya:

class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
}
}
class Phone
{
public string Name { get; set; }
}Code language: C# (cs)
Cara penulisan seperti ini akan menghasilkan error di C#, namun diizinkan pada bahasa lain seperti JavaScript dan PHP yang memperbolehkan perubahan tipe variabel.
JavaScript dan PHP termasuk bahasa dengan tipe lemah dan tipe dinamis, variabel tidak memiliki batasan tipe yang tetap.

Contoh yang Salah
class Program
{
static void Main()
{
var age = 18;
age = 3.14;
var p = new Phone();
var isBuy;
}
}
class Phone
{
var price = 1000;
var model = "iPhone";
int count = 12;
}Code language: C# (cs)
Inferensi Tipe