динамична е нова функция на FrameWork 4.0. Появата на динамиката е дала на C# характеристики на слаб езиков тип. Компилаторът вече не проверява типа при компилиране, а динамичният обект по подразбиране поддържа всяка функция, която желаете, по време на компилация. Например, дори и да не знаете нищо за обекта, върнат от метода GetDynamicObject, можете да направите кодово извикване по този начин и компилаторът няма да докладва грешка:
Когато става въпрос за правилна употреба, първо трябва да се посочи една грешна употреба:
Хората често използват ключовата дума var, за да сравняват с динамично. Всъщност var и dynamic са напълно две понятия и изобщо не трябва да се сравняват. След компилиране, времето за компилиране автоматично съвпада с действителния тип на var променливата и заменя декларацията на променливата с действителния тип, което изглежда сякаш декларираме действителния тип при кодиране. След компилирането на динамичния тип, той всъщност е тип обект, но компилаторът ще направи специално третиране на динамичния тип, така че да не извършва проверка на типове по време на компилация, а да поставя проверката на типа в изпълнението си.
Това може да се види в прозореца на редактора във Visual Studio. Променливите, декларирани като vars, поддържат "интелигентен смисъл", защото Visual Studio може да изведе действителния тип var типове, докато променливите, обявени за динамични, не поддържат "intelligent sense", защото компилаторът не знае нищо за типа на своето runtime. Използването на Intelligent Sense за динамични променливи изпраща "Това действие ще бъде разрешено по време на изпълнение".
Фактът, че динамичната променлива е обектна променлива, може да бъде потвърден с IL кода и IL кодът няма да бъде публикуван тук. Разбира се, компилаторът обработва и динамични декларации, за да различава директните обектни променливи.
dynamic се рендерира широко в MSDN, за да се опрости съвместимостта, и смятам, че именно на това някои разработчици се разбират погрешно: тъй като много разработчици не знаят как да използват кодиране като вторична разработка като COM+ и OFFICE, те спешно се нуждаят от динамична приложна причина. Така че, в ежедневната разработка, мисля, че динамиката е ценна:
Типова конверсия Преходът между инстанции от динамичен тип и други типове е лесен, а разработчиците лесно могат да превключват между динамични и нединамични поведения. Всяка инстанция може да бъде имплицитно конвертирана в динамичен тип инстанция, вижте следния пример: динамичен d1 = 7; динамичен d2 = "низ"; динамичен d3 = System.DateTime.Today; динамичен d4 = System.Diagnostics.Process.GetProcesses(); Обратно, имплицитното преобразуване може динамично да се приложи към всяко изразяване с типова динамика. И обратно, всяко изразяване с типова динамика може също да бъде имплицитно преобразувано в други типове. int i = d1; струн str = d2; DateTime dt = d3; System.Diagnostics.Process[] procs = d4; Проблем с претоварване с параметри на динамични типове в метода Ако даден метод се нарича преминаващ обект с тип динамичен или обектът, който се извиква, е тип динамичен (тип динамичен обект), тогава преценката за претоварване се случва по време на изпълнение, а не по време на компилиране. Динамичен езиков DLR по време на изпълнение Динамичният езиков период на изпълнение е . NET Framework 4 Beta 1 е нов набор от API-та, които осигуряват поддръжка на динамични типове в C# и също така реализират динамични програмни езици като IronPython и IronRuby. Dynamic опростява отраженията.
Преди използвахме отражения като това:
Сега имаме опростен начин да напишем:
Може да сме пренебрежителни към такова опростяване, все пак изглежда, че кодексът не е бил значително намален, но ако вземем предвид двете характеристики – ефективност и красота, тогава предимствата на динамиката са очевидни. Компилаторът оптимизира динамичните ефекти, за да бъдат много по-бързи от ефективността на некешираното отражение. Ако трябва да сравнявате, можете да пуснете кода на горните две (частта за добавяне на метода) за 10000000, за да направите заключение.
|