C #’da anahtar kelime nasıl varçalışır?
C #’da anahtar kelime nasıl varçalışır?
Yanıtlar:
Bu, bildirilen yerelin türünün, derleyici tarafından ilk atamasına göre çıkarılacağı anlamına gelir:
// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";
Özellikle, vardinamik tipte bir değişkeni tanımlamaz. Yani bu yasal DEĞİLDİR:
var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints
var sadece iki kullanımı vardır:
var foo = new { Bar = "bar" };varYerliler dışında hiçbir şeyin türü olarak kullanamazsınız . Bu nedenle, varalan / özellik / parametre / dönüş türlerini bildirmek için anahtar kelimeyi kullanamazsınız .
var foo = new Foo();ile aynı şeydir Foo foo = new Foo();, bu , bir süper tip değil , herhangi bir alt türden bir referans veya bir nesneye referans fooiçerebileceği anlamına gelir . FooFoo Foo
Veri türünün bağlamdan türetildiği (zımni) anlamına gelir.
Gönderen http://msdn.microsoft.com/en-us/library/bb383973.aspx
Visual C # 3.0'dan başlayarak, yöntem kapsamında bildirilen değişkenlerin örtük bir türü olabilir. Örtük olarak yazılmış bir yerel değişken, türü kendiniz bildirmişsiniz gibi güçlü bir şekilde yazılır, ancak türü derleyici belirler. Aşağıdaki iki i bildirimi işlevsel olarak eşdeğerdir:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
var klavye yazmayı ve görsel gürültüyü ortadan kaldırmak için kullanışlıdır, örneğin,
MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();
olur
var x = new MyReallyReallyLongClassName();
ancak okunabilirliğin feda edildiği noktaya kadar aşırı kullanılabilir.
Başlatma sırasında kendisine atanan şeye dayalı olarak bir tür bildirir.
Basit bir örnek, kodun:
var i = 53;
53'ün türünü inceleyecek ve esasen bunu şu şekilde yeniden yazacak:
int i = 53;
Şunlara sahip olabileceğimizi unutmayın:
long i = 53;
Bu var ile olmayacak. Bununla birlikte olabilir:
var i = 53l; // i is now a long
Benzer şekilde:
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.
Bu, karmaşık türlerde küçük bir kolaylık olabilir. Anonim türlerde daha önemlidir:
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);
Burada , tuttukları türlerin adı olmadığı için tanımlama ive jkullanmaktan başka bir yol varyoktur.
Hiç böyle değişken başlatıcılar yazmaktan nefret ettiniz mi?
XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))
Yani, C # 3.0'dan başlayarak, bunu şununla değiştirebilirsiniz:
var xmlSerializer = new XmlSerialzer(typeof(int))
Bir uyarı: Tür derleme sırasında çözülür, bu nedenle performansla ilgili herhangi bir sorun yoktur. Ancak Derleyici, derleme adımı sırasında türü algılayabilmelidir, böylece kod benzeri var xmlSerializer;hiç derlenmez.
int i = 100;// explicitly typed
var j = 100; // implicitly typed
var, C # 'da bir "bağlamsal anahtar sözcüktür", yani onu yalnızca değişkeni kullandığınız sınıfın bağlamında dolaylı olarak yerel bir değişken olarak kullanabileceğiniz anlamına gelir. Bunu "Main" veya başka bir dış sınıftan çağırdığınız bir sınıfta veya örneğin bir arayüzde kullanmaya çalışırsanız, CS0825 hatası < https://docs.microsoft.com/en-us/dotnet/ csharp / misc / cs0825 >
Bunu ne zaman kullanıp kullanamayacağınıza ilişkin açıklamalara şuradaki belgelerde bakın: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -yerel-değişkenler # açıklamalar >
Temel olarak, bunu yalnızca "var myValue =" Bu değerdir "gibi örtük bir değere sahip bir değişken bildirirken kullanmalısınız; Bu, örneğin" string "demeye kıyasla biraz zaman kazandırır, ancak IMHO, kaydedilir ve projenizin ölçeklenebilirliğine bir kısıtlama getirir.
var foo = new Foo(),footipte olabilirFooveya süper sınıfların herhangi. Bu nasıl yasal olabilir?