Galin Iliev

Software Architecture & Development

Ðúêîâîäñòâî çà C# 3.0 è LINQ

Âúâåäåíèå

Çà ïåò ãîäèíè (îôèöèàëíî – ñåäåì îò îáÿâàíåòî) ñúùåñòâóâàíå .NET Framework è ñúçäàäåíèÿò ñïåöèàëíî åçèê C# ïðîìåíèõà ìíîãî íà÷èíà íà ðàçðàáîòâàíå íà ñîôòóåð. Ìîæå äîðè äà ñå êàæå, ÷å íàïðàâèõà ðåâîëþöèÿ êàòî îáåäèíèõà íÿêîëêî âàæíè âúçìîæíîñòè, êîèòî äî îíçè ìîìåíò ñúùåñòâóâàõà íàêóï ñàìî â Java, à èìåííî:

·         Ñèëíî òèïèçèðàíè äàííè

·         Óëåñíåíî óïðàâëåíèå íà ïàìåòòà, ÷ðåç „ñúáèðà÷ íà áîêëóê“ (Garbage Collector)

·         Àðõèòåêòóðà, áàçèðàíà íà âèðòóàëíà ìàøèíà

·         Óïðàâëåíèå íà ãðåøêè áàçèðàíî íà îáðàáîòâàíå íà èçêëþ÷åíèÿ

·         Îáøèðíà áèáëèîòåêè, êîèòî ïîêðèâàò ãîëÿì äèàïàçîí îò ôóíêöèîíàëíîñò.

Ñúñ âòîðàòà âåðñèÿ íà .NET Framework ( ïóñíàòà íà ïàçàðà ïðåç äåêåìâðè 2004 ) áÿõìå ñâèäåòåëè íà ìíîæåñòâî íîâè äîïúëíåíèÿ êúì C#, êîèòî ïîçâîëÿâàò ñúçäàâàíåòî íà ìíîãî ïî-åëåãàíòíè ( è ïî-ëåñíî ÷èòàåìè) ñîðñîâå. Âúïðåêè, ÷å ìíîãî îò âàñ ñà çàïîçíàòè ñ òÿõ íåêà ãè îáîáùèì:

·         ×àñòè÷íè êëàñîâå (partial classes)ïîçâîëÿâàò ðàçäåëÿíåòî íà åäèí êëàñ â íÿêîëêî ôàéëà

·         Generics èëè ïàðàìåòðèçèðàíè òèïîâå

·         Íîâà ôîðìà íà öèêëè, âúâåæäàùà yield îïåðàòîðà, ïîäîáíî íà åçèêà Python

·         Àíîíèìíè ìåòîäè

·         Ìîäèôèêàòîðè çà äîñòúï ìîãàò äà áúäàò çàäàâàíè íåçàâèñèìî êúì ïîìîùíèòå get è set ìåòîäè íà ñâîéñòâàòà.

·         Ñòîéíîñòíè òèïîâå, êîèòî ìîãàò äà ïðèåìàò ñòîéíîñò null

·         Îáåäèíÿâàù îïåðàòîð ??, êîéòî âðúùà ïúðâèÿò îò îïåðàíäèòå, êîéòî íå å null è äð.

(Âå÷å èìà äîñòàòú÷íî ðåñóðñè ïî òåìàòà, òàêà ÷å íÿìà äà ïðîäúëæàâàì ñ îïèñàíèåòî íà C# 2.0)

Íåêà äà ïðîäúëæèì êúì

Visual Studio 2008 è C# 3.0

Ïðåäïîëàãàì, ÷å ìíîãî îò âàñ ñà ÷óâàëè çà Visual Studio 2008 (äîñêîðî ïîçíàòî ïîä êîäîâîòî èìå ”Orcas” ) è çà LINQ. Òîâà å ñëåäâàùàòà âåðñèÿ íà ïîïóëÿðíîòî Visual Studio (âåðñèÿ 9), êîåòî ùå áúäå ïóñíàòî íà ïàçàðà ñ íîâàòà âåðñèÿ 3.0 íà C#.  Êàêòî ìîæå äà ñå î÷àêâà ñ òàçè âåðñèÿ íà C# ùå ñå äîáàâè îùå ôóíêöèîíàëíîñò,  êîÿòî îùå ïîâå÷å ùå óâåëè÷è ïðîèçâîäèòåëíîñòòà íà ñîôòóåðíèòå èíæåíåðè. Íÿêîè îò òåçè äîïúëíåíèå ñà:

·         Ïîäîáðåíà èíèöèàëèçàöèÿ íà îáåêòèòå

C# 2.0

C# 3.0

Movie movie = new Movie();

movie.Name = “Space wars”;

movie.Director = “George Lucas”;

Movie movie = new Movie {Name=” Space wars”, Director = “George Lucas”};

·         Èíèöèàëèçàöèÿ íà êîëåêöèè ïîäîáíî íà ìàñèâè

C# 2.0

C# 3.0

SomeList list = new SomeList();

List.Add(1);

List.Add(2);

SomeList list = new SomeList {1, 2};

·         Ïîäðàçáèðàíå íà òèïà íà ïðîìåíëèâèòå

var text = “my text”;

=

String text = “my text”;

·         Èìïëèöèòíî òèïèçèðàíå íà ìàñèâèòå, â çàâèñèìîñò îò äàííèòå

int[] arr=new int[] { 1, 2, 3 }

=

var arr = new int[] { 1, 2, 3 }

 

·         Ëàìáäà èçðàçè

listOfFoo.Where(delegate(Foo x) { return x.size > 10; })

e åäíîçíà÷íî íà

listOfFoo.Where(x => x.size > 10);

 

·         Êîìïèëàòîðà ïðåâåæäà ëàìáäà èçðàçèòå êúì ñèëíî òèïèçèðàíè äåëåãàòè èëè êúì äúðâåòà îò èçðàçè (expression trees)

·         Àíîíèìíè òèïîâå

var x = new { Name = "Galcho" }

 

·         Ðàçøèðåíèÿ íà ìåòîäè

·         LINQ – Language INtegrated Query èëè êàòî îïèò çà ïðåâîä – çàÿâêè âãðàäåíè â åçèêà.

Âñÿêà îò òåçè íîâè ôóíêöèè ùå ðàçãëåäàìå â äåòàéëè â îòäåëíà ñåêöèÿ íà òîâà ðúêîâîäñòâî.

Êàêòî âèæäàòå Ìàéêðîñîôò ðàáîòÿò ïî èíòåðåñíè âúçìîæíîñòè, êîèòî ùå ïðåíåñàò C# íà åäíî íîâî íèâî. Ãîëåìèÿò âúïðîñ òóê å “Îòêúäå äà çàïî÷íåì?“. Òîçè ïúò íåêà çàïî÷íåì îòçàä íàïðåä. Òàêà ùå ñå ðàçêðèå íàé-ãîëÿìîòî ïðåäèìñòâî íà C# 3.0, à èìåííî LINQ, êàòî ïîñëå ùå ïîêàæåì â äåòàéëè îñòàíàëèòå íîâîâúâåäåíèÿ, êîèòî ïðàâÿò LINQ âúçìîæíî.

Àêî â íà÷àëîòî íå ñà âè ïîçíàòè åçèêîâèòå êîíñòðóêöèè – íå ñå ïðèòåñíÿâàéòå – ùå ãè îáÿñíèì â äåòàéëè â ñëåäâàùè ñåêöèè.

Èçèñêâàíèÿ çà ñòàðòèðàíå íà ïðèìåðèòå

Ïîâå÷åòî ïðèìåðè ìîãàò äà ñå èçïúëíÿò íà Visual Studio 2005, íî òðÿáâà äà èìàòå èíñòàëèðàíî äîïúëíåíèåòî Microsoft.NET LINQ Preview (May 2006) (ìîæå äà ãî ñâàëèòå îòòóê http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea )

Ñëåä èíñòàëèðàíåòî íà LINQ Preview (May 2006) ùå èìàòå íÿêîëêî íîâè øàáëîíà çà ïðîåêòè âúâ Visual Studio.

Ïðåïîðú÷âàì äà èçáåðåòå LINQ Console Application èëè LINQ Windows Forms Application. Êîíñòðóêöèèòå, êîèòî ùå áúäàò ïîêàçàíè ìîæå äà ñå ïîñòàâÿò â îáðàáîò÷èê íà ñúáèòèå íà áóòîí îò Windows Forms ïðèëîæåíèå èëè â ìåòîäà Main íà êëàñúò Program Êúì äàòàòà íà ïèñàíå íà òîçè òåêñò íàé-àêòóàëíàòà âåðñèÿ å Beta 2, êîÿòî ìîæå äà áúäå ñâàëåíà êàòî ìàøèíà âúâ ôîðìàò VirtualPC (http://www.microsoft.com/downloads/details.aspx?familyid=1ff0b35d-0c4a-40b4-915a-5331e11c39e6&displaylang=en) èëè êàòî èíñòàëàöèîííè ôàéëîâå (http://www.microsoft.com/downloads/details.aspx?FamilyId=69055927-458B-4129-9047-FCC4FACAE96C&displaylang=en).

Âíèìàíèå: Visual Studio 2008 Beta 2 íå å ïðîäóêò, êîéòî å ïóñíàò â ïðîäàæáà è âñå îùå íå ñå ïîääúðæà îò Ìàéêðîñîôò. Èìàéêè â ïðåäâèä òîâà, íå ñå ïðåïîðú÷âà èíñòàëàöèÿòà ìó íà ìàøèíà, êîÿòî ñå èçïîëçâà çà ðàçðàáîòêà íà êîìåðñèàëíè ñîôòóåðíè ïðîäóêòè, òúé êàòî òàçè âåðñèÿ âñå îùå íå å äîñòàòú÷íî ñòàáèëíà.

Ïðèìåðèòå ìîãàò äà áúäàò ñâàëÿíè îò ñúîòâåòíèòå âðúçêè.

Ñëåäâàùà ÷àñò: Âúâåäåíèå â LINQ è îñíîâíè âúçìîæíîñòè

Content