Èíèöèàëèçèðàíå íà îáåêòè è êîëåêöèè
Ïðåäè äà çàïî÷íåì äà èçïîëçâàìå îáåêòèòå òðÿáâà äà ñúçäàäåì èíñòàíöèÿ
è äà ãè èíèöèàëèçèðàìå. Ðàçáèðà ñå, ÷å îò òîâà íÿìà êàê äà èçáÿãàìå àêî èñêàìå äà
ñëåäâàìå äîáúð ñòèë è äà ñúçäàäåì ôóíêöèîíèðàùî ïðèëîæåíèå.
Äà ïðèåìåì, ÷å ñìå íàïðàâèëè äèçàéíà íà êëàñîâåòå, ñ êîèòî ùå ðàáîòè
ïðèëîæåíèåòî, íàïèñàëè ñìå ÷ëåí ïðîìåíëèâèòå, îáâèëè ñìå ãè â ñâîéñòâà (properties) ñ ïîäõîäÿùè get è
set ìåòîäè.
Íåêà äà ðàçãëåäàìå äåêëàðàöèÿòà íà ñëåäíèÿò êëàñ
public
class
Customer{
private int id;
public int Id{
get { return id; }
set { id = value; }
}
private string name;
public string Name{
get { return name; }
set { name = value; }
}
private string country;
public string Country{
get { return country; }
set { country = value; }
}
private string city;
public string City{
get { return city; }
set { city = value; }
}
private string address;
public string Address{
get { return address; }
set { address = value; }
}
public Customer() { }
}
|
 òîçè êëàñ ñà äåêëàðèðàíè ïåò ÷ëåí-ïðîìåíëèâè ñúñ ñúîòâåòíèòå èì ñâîéñòâà.
Êëàñúò âå÷å ìîæå äà áúäå èçïîëâàí â ïðèëîæåíèåòî, íî èíèöèàëèçàöÿòà ìó íÿìà äà å
ìíîãî óäîáíà. Çà äà çàäàäåì ñòîéíîñòè íà âñè÷êè ñâîéñòâà òðÿáâà äà:
·
Ñúçäàäåì èíñòàíöèÿ íà êëàñà èçâèêâàéêè êîíñòðóêòóðà ìó
è
·
Ïðèñâîèì ñòîéíîñò íà âñÿêî ñâîéñòâî ïîîòäåëíî.
Òîâà öÿëîòî äåéñòâèå ñ òîçè êîíñòðóêòîð ùå çàåìå 6 ðåäà è íå å ìíîãî
åëåãàíòíî ðåøåíèå ( îñîáåíî ñ íîâîâúâåäåíèÿòà â C# 3.0 ). Êàòî âúçìîæíîñò ìîæå äà ðàçøèðèì êîíñòðóêòîðà äà ïðèåìà
êàòî ïàðàìåòðè ñòîéíîñòèòå íà ñâîéñòâàòà, êîèòî èñêàìå äà çàäàäåì ïðè ñúçäàâàíåòî
íà îáåêòà. Íå òðÿáâà äà çàáðàâÿìå îñíîâíèòå ïðåäíàçíà÷åíèÿ íà êîíñòðóêòîðà:
·
Ñúçäàâà èíñòàíöèÿ íà îáåêòà, êàòî èíèöèàëèçèðà ïðîìåíëèâè
è ãè ïîäãîòâÿ çà ðàáîòà.
·
Ïðèåìà êàòî ïàðàìåòðè ìèíèìóì èíôîðìàöèÿ, êîÿòî å íåîáõîäèìà
çà ñúçäàâàíå íà îáåêòà. Íàïðèìåð çà ïðè ñúçäàâàíå íà îáåêò îò òèï
Customer ìîæå ïîäàäåì
ID èëè Name, â çàâèñèìîñò îò èçèñêâàíèÿòà êúì òîçè áèçíåñ îáåêò. Íÿìà ëîãèêà, îáà÷å,
íàïèøåì êîíñòðóêòîð, êîéòà çà äà ïðèåìà êàòî ïàðàìåòúð ñàìî ñòîéíîñò çà ñâîéñòâîòî
Address, òúé êàòî òî íå ìîæå äà
ñëóæè çà óíèêàëíî õàðàêòåðèçèðàíå íà îáåêòà. (Ðàçáèðà èìà è èçêëþ÷åíèÿ, êîãàòî ñå
íàëàãà èçïîëçâàíåòî íà ïîäîáåí ïîäõîä, íî òðÿáâà äà ñå èçïîëçâà âíèìàòåëíî)
Ïîñî÷åíèÿò ïðèìåð å ñðàâíèòåëíî ìàëúê, íî àêî ðàçãëåäàìå êëàñ ñúñ 20
ñâîéñòâà è ïî-ñëîæíà áèçíåñ ëîãèêà ùå âèäèì, ÷å òðóäíî ìîæå äà ñå ñúçäàäàò êîíñòðóêòîðè,
êîèòî äà îáõâàùàò âñè÷êè âúçìîæíè íà÷èíè íà èíèöèàëèçàöèÿ.
Óñëîæíåíèå, êîåòî íîñÿò ìíîæåñòâîòî êîíñòðóêòîðè å, ÷å âñåêè åäèí îò
òÿõ ñúäúðæà ëîãèêà ïî èíèöèàëèçèðàíå íà îáåêòà, êîÿòî å ðàçëè÷íà â çàâèñèìîñò îò
ïàðàìåòðèòå, íî è ìíîãî ïîäîáíà, çàùîòî ñòàâà âúïðîñ çà åäèí è ñúùè òèï. Òîâà ìîæå
äà äîâåòå äî ñëîæíî íàâúðçâàíå íà êîíñòðóêòîðèòå è ïîâòàðÿíå íà ïðîãðàìåí êîä, êîåòî
êàêòî çíàåì å èíäèêàöèÿ íà ëîøî ïîñòðîÿâàíå íà êîäà è ëîø äèçàéí.
Òî÷íî ïî òåçè ïðè÷èíè íå ìîæå íàïúëíî äà èçáÿãàìå îò øàáëîíà:
Customer cust =
new
Customer();
cust.Id
= 1;
cust.Name = "John Atanasov";
|
Òîçè øàáëîí íîñè îùå ïî-ãîëÿìî óñëîæíåíèå, êîãàòî òðÿáâà äà èíèöèàëèçèðàìå
êîëåêöèÿ îò òàêèâà îáåêòè.  òàêúâ ñëó÷àé ñëåäâàò äúëãè è ìîíîòîííè êîíñòðóêöèè
êàòî ãîðíèÿò ïðèìåð.
Çà äà ðåøèì òîçè ïðîáëåì ìîæå äà èçïîëçâàìå íîâèòå èçðàçè çà èíèöèàëèçèðàíå
íà îáåêòè â C# 3.0. Òàêà èìàìå âúçìîæíîñò çà ñúçäàäåì îáåêò è
äà èíèöèàëèçèðàìå ñâîéñòâàòà ìó ñúñ ñëåäíèÿò êîä:
Customer
cust = new
Customer
{ Id=1, Name="John Atanasov" };
|
Íåêà äà âèäèì êàêâî ñòàâà çàä êóëèñèòå. Çà öåëòà ùå èçïîëçâàìå ïîïóëÿðíèÿò
äåêîìïèëàòîð Reflector, çà äà âèäèì êîäà äî êîéòî ñå êîìïèëèðà ïðèëîæåíèåòî. ( Êîìïèëàòîðèòå
íà .NET åçèöèòå êîìïèëèðàò êîäà äî
Common Intermediate Language – CIL, à èçïîëçâà
CIL, çà äà ãåíåðèðà C# êîä).
Çà ïîñëåäíèÿò îáåêò êîìïèëàòîðà (îò
LINQ Preview (May 2006) ) å ãåíåðèðàë ñëåäíèÿò êîä:
Program.Customer customer2
=
new
Program.Customer();
customer2.Id
= 1;
customer2.Name
=
"John Atanasov";
Program.Customer customer1 = customer2;
|
Êàêòî ñå âèæäà êîìïèëàòîðà ñúçäàâà âðåìåíåí îáåêò ,÷èèòî ñâîéñòâà ñå
èíèöèàëèçèðàò ïî ñòàíäàðòíèÿò íà÷èí è ïîñëå âðåìåííèÿò îáåêò ñå ïðèñâîÿâà íà îáåêòà,
êîéòî ñìå äåôèíèðàíè ( ïîñëåäíîòî áè ñå âèäÿëî ïðè èçïîëçâàíå íà îáåêòà). Îáúðíåòå
âíèìàíèå, ÷å èìåíàòà íà ïðîìåíëèâèòå íå îòãîâàðÿò íà äåôèíèðàíèòå â ñîðñ êîäà, íî
òîâà å åäèí îò íåäîñòàòúöèòå íà äåêîìïèëàòîðèòå.
Îñâåí, ÷å å ñ ïî-ìàëêî êîä ïîñòèãàìå ñúùèÿò ðåçóëòàò êàêâà å ïðàêòè÷åñêàòà
ïîëçà îò òàçè êîíñòðóêöèÿ?
Íàé-ãîëÿìîòî ïðåäèìñòâî ïðè òîçè íà÷èí íà èíèöèàëèçèðàíå íà îáåêòèòå
ñå âèæäà ïðè èíèöèàëèçàöèÿ íà êîëåêöèè.
List<Customer> customers
=
new
List<Customer>{
new Customer { Id=1, Name="John Atanasov" },
new Customer { Id=2, Name="Galin Iliev" },
new Customer { Id=3, Name="Bill Gates", Country="USA",
Address="Seattle" }
};
|
Òàêà åëåãàíòíî ìîæå äà ñå èíèöèàëèçèðà êîëåêöèÿ îò îáåêòè. Ìîæå äà ñè
ïðåäñòàâÿòå êàê áè èçãëåæäàë êîäà çà èíèöèàëèçàöèÿ ïî ñòàíäàðòíèÿ íà÷èí (áåç äà
ñå ïðîìåíÿ äåêëàðàöèÿòà íà êëàñà
Customer ).
Îáúðíåòå âíèìàíèå íà ïîñëåäíèÿ îáåêò îò òèï
Customer - ïðè íåãî ñà çàäàäåíè ñòîéíîñòè íà äðóãè äâå äîïúëíèòåëíè
ñâîéñòâà. Òîâà ïîêàçâà,÷å ìîæå ïðîèçâîëíî äà èçáèðàìå íà êîè ñâîéñòâà äà çàäàâàìå
ñòîéíîñòè.
Ñëåäâàùà ÷àñò: Ïîäðàçáèðàíå íà òèïà íà ïðîìåíëèâèòå