BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Šaunūs Visual Studio 2008 aplinkos patobulinimai

Parašė Sergejus | 2007-07-30 19:59

Kelias dienas pradirbus su Visual Studio 2008 Beta 2 pastebėjau keletą šaunių kūrimo aplinkos patobulinimų. Kiekvienam programuotojui (ypač ASP.NET) teko matyti kruvą using sakinių, iš kurių yra realiai naudojami tik keli.

Asmeniškai aš prasieidavau per išeities tekstą ir ištrindavau visus nenaudojamus using sakinius, kad palaikyti kodo eleganciją. Nuo šiol Visual Studio 2008 gali tai padaryti už mus, galėdamas net surūšiuoti using sakinius abėcėlės tvarka.

Kita šauni galimybė susijusi su intellisense. Kaip žinia rašant kodą kartais intellisense uždengia visą žemiau esantį kodą, kas daro jo skaitymą neįmanomu. Dabar esant atidarytam intellisense sąrašui ir paspaudus CTRL mygtuką, jis (sąrašas) tampa pusiau permatomu.

Taigi tiek ir laukių jūsų komentarų bei pageidavimų :)

Rodyk draugams

C# 3.0 naujos galimybės (2 dalis)

Parašė Sergejus | 2007-07-29 20:43

Taigi tęsiame C# 3.0 naujų galimybių apžvalgą ir antroje dalyje aš aptarsiu naują raktinį žodį var ir praplėtimo (extension) metodus.

Prisiminkime kaip mes apibrėžiame lokalius kintamuosius

Ar niekada nekilo klausimas, kam nurodynėti tipą, jeigu pagal dašinę išraiškos pusę jį galima lengvai nustatyti. Tai tampa ypač akivaizdu su paskutiniu pavyzdžiu, kur List kartojamas du kartus (čia naudojamas objektų inicializatorius, apie kurį aš rašiau pirmoje dalyje). C# 3.0 tokiems atvejams siūlo naują raktažodį var, kuris formaliai nusako “nustatyk kintamojo tipą pagal dešinę išraiškos pusę”. Atnaujintas pavyzdys atrodys taip:

Svarbu pažymėti, C# 3.0 var raktažodį nereikia painioti su dinaminių kalbų (pavyzdžiui, javascript) var raktažodžiu. Kintamieji apibrėžti naudojant raktažodį var yra TIPIZUOTI, skirtingai negu dinaminiose kalbose, ir Visual Studio tai puikiai supranta

Kitas pastebėjimas išplaukia iš var apibrėžimo, jis gali būti naudojamas tik esant dešinei išraiškos pusei, tai yra žemiau pateiktas kodas yra nekorektiškas.

Šiuo atveju i kintamojo tipas turi būti nurodytas išreikštinai.

Kita C# 3.0 naujovė - praplėtimo metodai. Kaip ir sako jų pavadinimas, pagrindinė metodų paskirtis - praplėsti, praplėsti egzistuojantį tipą. Kaip kitaip galima praplėsti tipą kitaip nei per paveldėjimą? Pateiksiu pavyzdį, tarkime, norime string tipą praplėsti metodu ToInt32(), kuris konvertuotų tekstinį skaičių į int tipą (jeigu tai tik įmanoma).

Pirma reikia apibrėžti savo statinę klasę (būtent statinę) ir viešą statinį metodą ToInt32().

Ar pastebėjote kažką neįprasto? Kas per “this string s”? Būtent raktažodis this prieš tipą string nusako, kad tai bus string tipo praplėtimo metodas. Nuo šiol užtenka pridėti nuorodą į mūsų pagalbinę klasę ir string tipo kintamajam galima iškviesti ToInt32() metodą.

Kaip matyti, praplėtimo metodai nuo paprastųjų skiriasi mėlyna rodyklite ir prierašu (extension). Daugeliui gali kilti adekvatus klausimas, kaip C# 3.0 sugeba praplėsti egzistuojančią klasę? Atsakymas labai paprastas, kompiliatorius minėtą kvietinį pakeis į žemiau pateiktą:

Taigi tiek šiam kartui, rytoj trumpai aprašysiu kelis Visual Studio IDE patobulinimus, o vėliau vėl grįšiu prie C# 3.0 naujovių.

Rodyk draugams

C# 3.0 naujos galimybės (1 dalis)

Parašė Sergejus | 2007-07-28 14:57

Taigi šiandien antra diena kaip žaidžiu su Visual Studio 2008 Beta 2 ir kaip žadėjau anksčiau, pradedu straipsnių ciklą skirtą naujoms VS 2008 galimybėms aprašyti. Pradėsiu nuo C# kalbos naujovių: pirmoje dalyje aptarsime automatines savybes ir objektų inicializavimą.

Aprašant naujas klases dažnai savybių aprašas susiveda į privačių kintamųjų - viešų savybių aprašą, panašų į žemiau pateiktą.

Kiek kartų kildavo klausimas - kam reikia tiek bereikalingo kodo? O paskui save nuramindavome - to reikalauja OOP. Automatinių savybių deka dabar galima išvengti papildomo kodo, jeigu savybės get ar set metodai neneša savyje jokios papildomos logikos. Patobulinta klasė Asmuo atrodys tokiu būdu:

Tiems kas mėgsta taupyti vietą eilutėse, klasės aprašą gali dar labiau sutraukti:

Kita jaujovė - objektų inicializavimas. Įsivaizduokime, kuriant Asmuo klasės objektą mes tuo pačiu norime nurodyti ir asmens vardą bei pavardę. Tam mes galime sukurti atitinkamą klasės konstruktorių. Bet jeigu klasė nėra mūsų ir toks konstruktorius nėra numatytas? Kodas atrodytų taip:

Objektų inicializavimo dėka, bet kokį objketą galima inicializuoti sukurimo metu, panašiai kaip tai yra daroma su masyvais.

Įdomu tai, kad Visual Studio “supranta”, kad mes norime pasinaudoti objekto inicializavimu ir intellisense parodys visas objekto savybes

Objektų inicializacimas taipogi veikia ir su kolekcijomis:

Antroje “C# 3.0 naujos galimybės” dalyje aptarsiu naują raktažodį var ir praplėtimo (extension) metodus.

Rodyk draugams

Visual Studio 2008 Beta 2 jau prieinamas

Parašė Sergejus | 2007-07-27 08:52

Jau parsisiunčiau ką tik išleistą Visual Studio 2008 Beta 2. Artimiausiomis dienomis pasidalinsiu savo pirmais įspūdžiais.

SVARBU!

Jau išaiškėjo keletas problemų. Kai suinstaliuosite Visual Studio 2008 Beta 2, būtinai reikia parsiųsti ir įvykdyti batch failą. Kaip rašo Microsoft kūrimo padalinio direktorius Scott Guthrie, problema yra su System.Web.Extensions.dll failu (ASP.NET AJAX dalis), dėl kurio egzistuojančios ASP.NET 2.0 AJAX aplikacijos prisiriš prie naujesnės System.Web.Extensions.dll failo versijos, taip sukuriant nereikalingą priklausomybę nuo .NET Framework 3.5.

Rodyk draugams

Visual Studio, SQL Server ir Windows Server skaitliukas

Parašė Sergejus | 2007-07-26 07:57

Nuo šiol dešinėje juostoje atsirado skaitliukas, rodantis kiek liko iki Visual Studio 2008, SQL Server 2008 ir Windows Server 2008 oficialaus pristatymo, kuris, primenu, įvyks 2008-02-27.

Visi norintys patalpinti tokį skaitliuką pas save, gali padaryti tai absoliučiai nemokamai.

Rodyk draugams

Keletas patarimų dirbant su Web.config failu

Parašė Sergejus | 2007-07-24 08:27

Web.config failas yra vienas pagrindinių ASP.NET aplikacijuose, ten saugomos ne tik nuorodos į naudojamas bibliotekas, bet ir įvairūs konfigūracijos nustatymai, įskaitant aplikacijos nustatymus (appSettings sekcija) ir prisijungimo eilutės nustatymus (connectionStrings sekcija).

appSettings ir connectionStrings sekcijos turi vieną įdomų atributą - file, kuris leidžia nurodyti kuriame kitame faile yra saugomi nustatymai. Tai pasidaro ypač prasminga su prisijungimo eilutės nustatymais, kadangi ten dažnai nurodoma ne tik duomenų bazė, bet ir vartotojo vardas bei slaptažodis su kuriais aplikacija jungiasi. Bendras Web.config vaizdas atrodytų taip:

Bet vien atskirymo neužtenka, kartais prireikia ir užšifruoti duomenis (ypač minėtą connectionStrings sekciją), tada galima pasirašyti tam skirtą klasę:

Taigi tiek patarimų, tikiuosi nuo šiol jūsų Web.config failas bus tvarkingai struktūrizuotas ir apsaugotas nuo pašalinių akių :).

Rodyk draugams

Derinimo (debugging) problemos Windows Vista operacijų sistemoje

Parašė Sergejus | 2007-07-22 22:22

Jeigu jus ką tik perėjote prie Windows Vista operacijų sistemos ir bandėt derintii programą iš Visual Studio aplinkos, tai tikriausiai pastebėjote, kad derinimas neveikia. Tai yra dėl to, kad derinimas gali veikti tik jeigu Visual Studio paleistas su administratoriaus teisėmies. Skirtingai negu ansktesniose Windows operacijų sistemose, Windows Vista sistemoje prisijungus administratoriaus vardu dar nereiškia, kad ir programos bus vykdomos administratoriaus vardu. Tai reikia išskirtinai nusakyti naudojant kontekstinio meniu punktą “Run as administrator” (dešiniu pelės klavišu -> Run as administrator)

Kadangi toks paleidimo būdas nėra labai patogus, galima nustatyti, kad Visual Studio būtų visada paleidžiamas administratoriaus teisėmis. Tam reikia nueiti į Visual Studio nuorodos nustatymus (dešiniu pelės klavišu -> Properties), pereiti prie kortelės Compatibility ir pažymėti nustatymą “Run this program as an administrator”

Voilá ir derinimas veikia :)

Rodyk draugams

PostBack įvykį sukelusio elemento gavimas

Parašė Sergejus | 2007-07-20 07:49

Dažna problema programuojant ASP.NET puslapius sužinoti, koks elementas sukėlė PostBack įvykį. Žinant jį, galima gerokai optimizuoti siunčiamų duomenų kiekį ir paspartinti puslapio pasikrovimo laiką. Paprasčiausias pavyzdis - LinkButton tipo elementas, paspaudus ant kurio pereinama prie kito puslapio. Spaudžiant LinkButton visą laiką įvykstą pakartotinis puslapio pasikrovimas (OnInit, OnLoad, …), kuris dažniausiai nėra būtinas. Žemiau pateiktas kodas leidžia sužinoti PostBack įvykį sukėlusį elementą.

(kopijuoti kodą)

Rodyk draugams

ASP.NET tėvinių ir vaikinių komponentų radimas naudojant benrybines (generics) funkcijas

Parašė Sergejus | 2007-07-19 23:07

Kaip žinia, ASP.NET puslapiuose egzistuoja komponentų hierarchija, pavyzdžiui vienas komponentas-konteineris gali savyje turėti kitus konteinerius, o tie - dar kitus. Elementariausias pavyzdys - lentelė, kurios vienoje iš cėlių randasi mygtukas:

Dabar įsivaizduokime, norime prieiti prie eilutės (elemento TR), kuriai priklauso mygtukas btnTest. Paprasčiausiu atveju užtektų nusakyti TableRow tr = (TableRow)btnTest.Parent.Parent. Problema yra tame, kad ne visada įmanoma nusakyti per kiek lygiu aukčiau randasi reikalingas objektas. Tam reikia apibrėžti funkciją, kuri rekursiškai kiltų aukčiau ir tarp tėvų, protėvių, proprotėvių, … ieškotų reikiamo tipo objekto. Kadangi ieškomo objekto tipas nėra giežtai apibrėžtas, yra du sprendimai:

  • Grąžinti Control tipo objektą, kuri vėliau reikės konvertuoti į ieškomą tipą
  • Pasinaudoti bendrybėmis (generics) ir apibrėžti bendrybinę funkciją, kuri grąžins reikiamo tipo objektą

Kaip žinia, OOP skatina kuo mažiau naudoti konvertavimų į viršų (upcasting) ir žemyn (downcasting), todėl bendrybinė funkcija yra geresnis sprendimas.

Žemiau yra pateiktos dvi funkcijos, kurios skirtos nurodyto tipo tėvo ir vaiko paieškai:



(kopijuoti kodą)

P.S. Ačiū Evaldui už pastebėtą klaidą.

 

Rodyk draugams

Microsoft TechEd’07 Developers

Parašė Sergejus | 2007-07-17 18:56

Prieš porą dienų užsiregistravau į Microsoft TechEd’07 Developers, žada būti visai įdomus renginys. Būtų šaunu sužinoti jeigu kas iš skaitytojų irgi žada važiuoti.

Rodyk draugams