Apa arti "var" di C #? [duplikat]


Jawaban:


161

Ini berarti bahwa tipe lokal yang dideklarasikan akan disimpulkan oleh kompilator berdasarkan tugas pertamanya:

// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";

Khususnya, vartidak mendefinisikan variabel menjadi tipe dinamis. Jadi ini TIDAK legal:

var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints

var hanya memiliki dua kegunaan:

  1. Ini membutuhkan lebih sedikit pengetikan untuk mendeklarasikan variabel, terutama saat mendeklarasikan variabel sebagai tipe generik bersarang.
  2. Ini harus digunakan saat menyimpan referensi ke objek dengan tipe anonim, karena nama tipe tidak dapat diketahui sebelumnya: var foo = new { Bar = "bar" };

Anda tidak dapat menggunakan varsebagai jenis apa pun kecuali penduduk setempat. Jadi, Anda tidak dapat menggunakan kata kunci varuntuk mendeklarasikan jenis bidang / properti / parameter / pengembalian.


@cdhowie Bagaimana jika sambil berkata, var foo = new Foo(), foobisa dari jenis Fooatau kelas super. Bagaimana itu bisa legal?
John Strood

3
@Djack Ini tidak legal, dan bukan itu masalahnya. var foo = new Foo();adalah hal yang sama seperti Foo foo = new Foo();yang berarti bahwa foodapat berisi Fooreferensi, atau referensi ke objek apapun Foo sub jenis, bukan suatu Foo yang super jenis.
cdhowie

15

Artinya tipe data diturunkan (tersirat) dari konteks.

Dari http://msdn.microsoft.com/en-us/library/bb383973.aspx

Mulai dalam Visual C # 3.0, variabel yang dideklarasikan pada lingkup metode dapat memiliki tipe var implisit. Variabel lokal yang diketik secara implisit diketik dengan kuat seperti jika Anda telah mendeklarasikan tipenya sendiri, tetapi kompilator menentukan tipenya. Dua deklarasi i berikut secara fungsional setara:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var berguna untuk menghilangkan pengetikan keyboard dan gangguan visual, misalnya,

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

menjadi

var x = new MyReallyReallyLongClassName();

tetapi dapat digunakan secara berlebihan sampai pada titik di mana keterbacaan dikorbankan.


9

"var" berarti kompilator akan menentukan tipe eksplisit variabel, berdasarkan penggunaan. Sebagai contoh,

var myVar = new Connection();

akan memberi Anda variabel tipe Connection.


7

Ini mendeklarasikan tipe berdasarkan apa yang ditugaskan padanya dalam inisialisasi.

Contoh sederhananya adalah kode:

var i = 53;

Akan memeriksa tipe 53, dan pada dasarnya menulis ulang ini sebagai:

int i = 53;

Perhatikan bahwa sementara kita dapat memiliki:

long i = 53;

Ini tidak akan terjadi dengan var. Padahal bisa dengan:

var i = 53l; // i is now a long

Demikian pula:

var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.

Ini bisa menjadi kenyamanan kecil dengan tipe yang rumit. Ini lebih penting dengan tipe anonim:

var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
  Console.WriteLine(j.ID.ToString() + ":" + j.Name);

Di sini tidak ada cara lain untuk mendefinisikan idan jselain menggunakan varkarena tidak ada nama untuk tipe yang mereka pegang.


5

Apakah Anda pernah benci menulis penginisialisasi variabel seperti itu?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

Jadi, dimulai dengan C # 3.0, Anda bisa menggantinya dengan

var xmlSerializer = new XmlSerialzer(typeof(int))

Satu pemberitahuan: Jenis diselesaikan selama kompilasi, jadi tidak ada masalah dengan kinerja. Tetapi Compiler harus dapat mendeteksi tipe selama langkah build, jadi kode like var xmlSerializer;tidak dapat dikompilasi sama sekali.


0
  • Seperti namanya, var adalah variabel tanpa tipe data apa pun.
  • Jika Anda tidak tahu tipe data mana yang akan dikembalikan dengan metode apa pun, kasus seperti itu baik untuk menggunakan var.
  • var adalah tipe implisit yang berarti sistem akan mendefinisikan tipe datanya sendiri. Kompilator akan menyimpulkan tipenya berdasarkan nilai di sebelah kanan operator "=".
  • int / string dll. adalah tipe eksplisit seperti yang Anda definisikan secara eksplisit.
  • Var hanya dapat didefinisikan dalam suatu metode sebagai variabel lokal
  • Beberapa vars tidak dapat dideklarasikan dan diinisialisasi dalam satu pernyataan. Misalnya, var i = 1, j = 2; tidak valid.
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

0

var adalah "kata kunci kontekstual" dalam C # yang berarti Anda hanya dapat menggunakannya sebagai variabel lokal secara implisit dalam konteks kelas yang sama yang Anda gunakan sebagai variabel. Jika Anda mencoba menggunakannya di kelas yang Anda panggil dari "Utama" atau kelas eksterior lainnya, atau antarmuka misalnya, Anda akan mendapatkan kesalahan CS0825 < https://docs.microsoft.com/en-us/dotnet/ csharp / misc / cs0825 >

Lihat komentar tentang kapan Anda dapat dan tidak dapat menggunakannya dalam dokumentasi di sini: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -variabel-lokal # komentar >

Pada dasarnya, Anda hanya boleh menggunakan ini ketika Anda mendeklarasikan variabel dengan nilai implisit seperti "var myValue =" This is the value "; Ini menghemat sedikit waktu dibandingkan dengan mengatakan" string "misalnya, tetapi IMHO tidak banyak waktu disimpan dan membatasi skalabilitas proyek Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.