2011-06-22 25 views
7

Z początku istnienia rodzaju dynamic i DLR w .NET 4, teraz mam 3 opcje podczas deklarowania, co nazywam "otwarte" typy:Dynamiczny, Object, Var

  • var, lokalnie ukryte rodzajów, aby podkreślić 'co', a nie 'jak',
  • object, alias System.Object i
  • dynamic, wyłącz kontrole kompilatora, dodając metody/właściwości w czasie wykonywania

Podczas gdy o nich jest dużo napisanych, nic, co znalazłem nie łączy ich ze sobą, i muszę przyznać, że to wciąż trochę niewyraźne.

Dodaj do tego LINQ, wyrażenia lambda, typy anonimowe, odbicie ... i robi się coraz bardziej chwiejny.

Chciałbym zobaczyć przykłady, być może kontrastujące zalety/wady, aby pomóc mi ugruntować moje zrozumienie tych koncepcji, a także pomóc mi zrozumieć, kiedy, gdzie i jak powinienem wybrać między nimi.

Dziękujemy!

Odpowiedz

5
  • Zastosowanie var zachować swój kod krótkie i bardziej czytelne, lub podczas pracy z anonimowych typów:

    var dict = new Dictionary<int, List<string>>(); 
    
    var x = db.Person.Select(p => new { p.Name, p.Age }); 
    
  • Korzystając dynamic gdy dynamiczne wiązanie jest przydatna, lub wymagane. Lub gdy musisz zdecydować, którą metodę wywołać w oparciu o typ środowiska wykonawczego obiektu.

  • Używaj tak mało jak to możliwe, wolisz używać określonych typów lub generycznych.Jedno miejsce, gdzie jest to przydatne, gdy masz obiekt używany tylko do blokowania:

    object m_lock = new object(); 
    
    lock (m_lock) 
    { 
        // do something 
    } 
    
+0

To nie jest przykładem typu anonimowego (chyba 'name' jest jego własny anonimowy typ, co nie wydaje mi się możliwe). –

+0

@George, tak, naprawione. Nie wiem, dlaczego tak to napisałem. – svick

2

var: Używam go do przechowywania kodu skrócie:

zamiast piśmie:

MyFramework.MyClass.MyType myvar = new MyFramework.MyClass.MyType(); 

mogę trzymać go "krótko":

var myVar = new MyFramework.MyClass.MyType(); 
3

var jest dokładnie taka sama jak pisanie pełnego typu, więc użyj tego, gdy zmienna powinna być jednego typu. Jest często używany z LINQ, ponieważ często używasz LINQ jako anonymous types.

object jest katalogiem głównym wszystkich klas, dlatego należy go używać, gdy zmienna będzie zawierała wiele różnych, niepowiązanych/niedziedziczonych wystąpień lub gdy nie znamy czasu kompilacji reklam typu (np. Odbicia). Zasadniczo należy go unikać, jeśli to możliwe.

dynamic jest dla obiektów, które mają charakter dynamiczny, że mogą one mieć różne metody i właściwości, są przydatne do interakcji z COM, jak i dynamicznych języków i języków specyficznych domen.

0

Have patrzeć na article daje korzyści i ograniczenia hasła dynamiczne.

1

var statycznie typem więc Type jest znany w czasie kompilacji i wykonywania (tak pomaga literówki połowowe)

dynamic bardzo podobne do obiektów, ale nie ograniczone, ponieważ byłoby to z metodami Object, tutaj Type jest wywnioskować w czasie wykonywania będzie on używany w przypadkach, w których chcesz osiągnąć pewne dynamiczne zachowanie.

Cóż za object nie wywiera żadnych takich elementów, które można byłoby wykorzystaniem Generics byłyby bardziej korzystne w takich przypadkach

Powiązane problemy