Neden C# dinamik tip statik?
Okuma ve dinamik anahtar kelime keşfetmek [MSDN] (yer . satır aşağıdaki buldum ^em>Using Type dynamic (C# Programming Guide)):
Bu tür statik bir türüdür, ama yazın dinamik bir nesne statik tür denetlemesi atlar. Çoğu durumda, bu işlevler nesne türü vardır gibi.
Hat üstünde statik anlamı nedir ve nasıl statik tür denetlemesi bypass mı?
CEVAP
Bu statik yazma
string foo = "bar";
foo
Bu bir derleme zamanı hatası neden olur bu yüzden şimdi bir dize:
foo = 1;
Eğer var
, kullanıyorsanız bile hala statik olarak yazılan bir şey
var foo = "bar"; // foo is now a string
foo = 1; // still a compile time error
Dinamik anahtar kelime kullanarak, bu tür statik olmayacak ve şimdi bunu yapmak, böylece değiştirilebilir
dynamic foo = "bar";
foo = 1; // this is now fine.
Diyor ki, neden şimdi, "statik bir yazın türü" çok dinamik dilleri (Javascript gibi) çünkü, böyle bir şey yapabilirsiniz:
var foo = { bar: 1 };
Bir özelliği olan bir nesne oluşturur "bar", ve sonra bunu yapabilirsiniz:
foo.la = 2;
Hangieklerfoo
nesne için yeni bir özellik. Ama eğer C içinde aynı numarayı çalışırsanız#
dynamic foo = new SomeClassThatDoesntHaveABarProperty();
foo.bar = 2; // runtime error
Ne de bir özelliği silebilirsiniz. Dinamik bir değişken için herhangi bir tür atayabilirsiniz, ama o tipler kendilerini değiştiremezsiniz.
Eğer işlevsellik bu tür bir ihtiyacınız yoksa, o zaman ExpandoObject bakmak isteyeceksiniz
Açıklama dediği gibi, dynamic
fonksiyonlar durumlarda bir çok, bir nesne gibi. Bunu yapmak için:
dynamic foo = new Foo();
foo = new Bar();
Sadece bu gibi:
object foo = new Foo();
foo = new Bar();
Ama fark özellikleri veya yöntemleri kullanmak istediğinizde gelir. Dinamik, bunu yapabilirim:
dynamic foo = new Foo();
foo.FooMethod(); // Note: You WILL get a runtime exception if foo doesn't have a FooMethod
Ama bir nesne ile, bunu yapmak istiyorum:
object foo = new Foo();
((Foo)foo).FooMethod(); // Note: I HAVE to know the type at compile time here
Yalnızca ben zaten Foo
a tipi foo
tipine cast edebilirim Eğer bana görederleme zamanındaeğer zaten, o zaman sadece object
yerine benim tip olarak Foo
sahip olabileceğimi bilsem , ve.
Neden Java statik olarak bir sınıf bil...
Neden't statik yöntemler Java'da ...
Neden statik değişkenler kötülük sayıl...
't neden C# Statik Yöntemler bir ...
Neden Java temel yöntem statik mi?...