C# хэлний тухай

Өнөө үед мэдээллийн технологийн салбарт эрэлттэй, эрчимтэй хөгжүүлэлттэй, хамгийн хүчирхэг хэлүүдийн нэг бол програмчлалын C# хэл юм. Хэл дээр десктопийн жижигхэн програмаас эхлээд өдөрт сая сая хэрэглэгчид үйлчлүүлдэг том хэмжээний веб портал, сервисүүд гээд маш олон төрлийн програмуудыг боловсруулж байна.
C# залуу хэл биш бөгөөд .NET платформ хөгжлийн урт замыг туулсан. 2002 оны 2-р сард Microsoft Visual Studio .NET -тэй зэрэг хэлний анхны хувилбар гарсан.

C# нь С -тэй төрлийн буюу C++, Java -тай төстэй бичлэгийн дүрэмтэй. Иймээс та эдгээр хэлүүдийн нэгийг мэддэг бол C# -ийг сурахад төвөггүй.
C# обьект хандлагат хэл бөгөөд энэ чиглэлд C++, Java -аас олон зүйлийг авсан. Жишээ нь C# полиморфизм, удамшилт, статик төрөлжүүлэлтийг дэмждэг. ОХ аргачлал том хэмжээний асуудлыг шийдэхийн зэрэгцээ уян хатан, өргөтгөн хөгжүүлэх боломжтой програмыг болосруулах боломжийг олгодог. C# -ийг идэвхтэй хөгжүүлж байгаа бөгөөд шинэ хувилбар бүрд сонирхолтой боломжууд ихээр бий болсоор байгаа. 

.NET платформийн үүрэг.

C# -ийг ярихад .NET платформийн (Windows Forms, WPF /Windows Presentation Foundation/, ASP.NET, Xamarin) технологи гэж үзэх нь цөөнгүй ба эсрэгээрээ .NET -ийн тухай ярихад түүнийг C# гэж үзэх гээд байдаг. Эдгээр ойлголтууд холбоотой хэдий ч тэдгээрийг адилтган үзэх нь буруу. C# -хэлийг .NET фреймворктой ажиллахад зориулан тусгайлан болосруулсан ч .NET ойлголт бол нилээд өргөн.   
.NET платфоормийг Билл Гейтс Microsoft компаний бүтээгдхүүнүүдийн хамгийн сайн нь гэж хэлсэн байдаг. Үнэхээр ч .NET фреймворк програм боловсруулах хүчирхэг хэрэгсэл. Түүний дараах үндсэн шинжүүдийг онцолж болохоор.

  • Олон хэлүүдийг дэмждэг. Платформийн суурь Common Language Runtime (CLR) буюу хэлний ерөнхий орчин учраас үүний ачаар .NET фреймворк C# -аас гадна VB.NET, C++, F# зэрэг хэлүүд болон .NET -тэй холбоотой бусад хэлүүдийн төрөл бүрийн ажиллагааг дэмждэг. Жишээ нь Delphi.NET. Компиляц хийгдэхэд эдгээр хэлүүд дээрх код .NET платформийн ассемблер маягийн CIL (Common Intermediate Language) гэх ерөнхий хэлээр багцлагддаг. Иймээс тодорхой нөхцөлд нэг програмийн модулиудийг тусдаа хэлүүд дээр боловсруулж болно.
  • Платформ хоорондын зохицол. .NET нь платформын шилжилттэй. (зарим нэгэн хязгаарлалт бий.) Жишээ нь платформийн сүүлийн хувилбар одоогоор .NET 6 орчин үеийн ихэнх Windows, MacOS, Linux үйлдлийн системийг дэмждэг. .NET дээр төрөл бүрийн технологийг хослуулан ашиглан C# хэл дээр Windows, MacOS, Linux, Android, iOS үйлдлийн сисийн програмийг боловсруулж болно.
  • Классуудын хүчирхэг сантай. .NET дэмждэг бүх хэлүүдэд нэгдсэн классуудын сантай. C# хэлээр текст засварлагч, чат эсхүл нарийн веб сайт гээд ямарч програмийг боловсруулахдаа бид .NET -ийн классуудын сантай харьцана.
  • Төрөл бүрийн технологиуд. Хэлний ерөнхий орчин CLR, классуудын суурь сан нь боловсруулагчид ямар нэгэн програмыг боловсруулахдаа ашиглаж болох бүхэл бүтэн технолгийн суурь болдог. Жишээ нь, өгөгдлийн сантай ажиллахад ADO.NET , Entity Framework Core, баялаг интерфейстэй график програм зохиоход WPF, WinUI харин энгийн график програмд Windows Forms технологиуд зорилагдсан байхад үйлдлийн систем хоорондын мобил болон декстопийн програмд Xamarin/MAUI харин веб сайт болон веб програмд ASP.NET гэх мэтээр байх жишээтэй.
  • Бүтээмж. .NET 6 дээрх веб програм олон тооны тестийн хэрэгслүүдийн үзүүлэлтээр бусад технологиудаар боловсруулсан веб програмуудаас олон төрөлд тасархай түрүүлж байгаа нь батлагдсан. .NET 6 -ийн програмууд өндөр бүтээмжээрээ ялгардаг.

Үүнээс гадна .NET фреймворк, C# хэлний автомат хог цэвэрлэлтийг дурдах хэрэгтэй. Энэ нь ихэнх тохиолдолд бид санах ойн чөлөөлөлтөд санаа зовох хэрэггүй гэсэн үг. Хэлний ерөнхий орчин CLR өөрөө хог цэвэрлэгчийг дуудан санах ойг цэвэрлэнэ.

.NET фреймворк /Framework/ .NET 6

.NET удаан хугацаанд .NET Framework нэрээр голдуу Windows -д зориулагдан хөгжиж байсан. Энэ платформийн сүүлийн .NET Framework 4.8 хувилбар 2019 онд гараад хөгжүүлэлт зогссон.
2014 оноос Microsoft төрөл бүрийн үйлдлийн системд зориулагдсан .NET Core платформийг хөгжүүлж эхэлсэн. .NET Core платформ өөртөө .NET Framework -ийн бүх боломжуудыг агуулан шинэ функционалуудтай болох ёстой байсан. Энэ платформийн .NET Core 1, .NET Core 2, .NET Core 3, .NET 5 хувилбаруудыг Microsoft гаргаж байгаад одоогоор сүүлийн хувилбар нь .NET 6 байгаа. Иймээс .NET Framework нь голлон Windows -д зориулагдсан бол .NET 6 олон үйлдлийн системд зориулагдсан гэдгийг ялган ойлгох хэрэгтэй.        

Удирлагатай ба удирлагагүй код.

C# дээр боловсруулагдсан програмыг удирдлагатай код (managed code) гэж нэрлэх нь элбэг. Энэ юу гэсэн үг вэ? гэвэл тухайн програмыг .NET платформ дээр суурилан үүсгэсэн тул програмыг ачааллах, шаардлагатай бол санах ойг цэвэрлэдэг ажиллагаанууд хэлний ерөнхий орчноор /CLR/ удирдагдана гэсэн үг. Гэхдээ C#, VB.NET эсхүл F# шиг CIL (Common Intermediate Language) ерөнхий хэл рүү биш ердийн машиний код руу хөрвүүлэгддэг жишээ нь C++ хэл дээр зохиогдсон програмууд бий. Энэ тохиолдолд .NET програмыг удирдахгүй. Гэсэн хэдий ч .NET платформ удирдлагагүй кодтой харилцан ажиллах боломжийг өгдөг.   

JIT-компиляц

C# -ийн код CIL (Common Intermediate Language) ерөнхий хэл рүү exe эсхүл dll өргөтгөлтэй файлд багцлагдан хөрвүүлэгдэнэ. CIL бол .NET -ийн виртуал машиний "дээд түвшингийн ассемблер" хэл юм. Ийм програмуудыг ажиллуулахаар ачааллахад JIT компиляц (Just-In-Time) хийгдэн машиний код руу шилжүүлэн дараа нь ажиллуулдаг. Програм олон тооны бүтцийг агуулсан том хэмжээний байж болох ч тухайн үед хандаж байгаа хэсгийг л машиний код руу хөрвүүлдэг. Хэрэглэгч програмын өөр хэсэгт хандахад тэр хэсгийн кодийг CIL -ээс машиний код руу хөрвүүлнэ. Гэхдээ нэгэнт хөрвүүлэгдсэн кодийн хэсэг програмийн ажиллагааг дуустал хадгалагдах тул энэ нь бүтээмжийг /хурд/ дээшлүүлдэг.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 1417 Төлбөртэй

Онолын хувьд обьект хандлагат програмчлал гурван үндсэн зарчим дээр суурилдаг. Үүнд

  1. encapsulation - хайрцаглалт
  2. inheritance - удамшилт
  3. polymorphism - полиморфизм

ордог. Хайрцаглалт гэдгийг классын ажиллагааны логикийг бусад классуудаас хандалтын хэлбэрээр зохицуулан хаах гэж ойлгож болно. Өөрөөр хэлбэл бусад классуудад ашиглаж болох арга, шинжүүдийг public төрлийнх харин шинжид утга олгох, арга өөрөө ашиглах хувьсагчид гэх мэт бусад аргууд ашиглах шаардлагагүй хэсгүүдэд хандалтын private төрлийг тавих юм. Энэ тухай бид C# төрлийн бүрэлдхүүн хичээлд арга private төрлийн хувьсагчид хэрхэн хандахыг ойлгохдоо авч үзсэн.

  Нээгдсэн тоо: 1445 Бүртгүүлэх

Өмнөх хичээлээс бид C# хэлний өгөгдлийн бүх төрлүүд утгаар (өөрөөр хэлбэл бүтцээр "struct") болон холбоосоор (өөрөөр хэлбэл классаар "class") өгөгдөх төрлүүдэд хуваагдахын дээр бас энгийн ба энгийн бус гэсэн ангилалтайг мэдэж авсан.
Энэ хичээлээр бид төрлүүд ямар үндсэн хэсгээс бүрддэг эдгээр хэсгүүд өөр хоорондоо хэрхэн харьцдаг талаар авч үзнэ. Хичээлд Өгөгдлийн төрлүүд хичээлийн жишээг ашиглах болно. C# хэлний өгөгдлийн ямарч төрөлд тэдний ямар ангилалд багтахаас үл хамааран дараах гишүүдтэй байж болно. Үүнд:

  1. Талбарууд /fields/ - Энд төрөлд удирдаж байх өгөгдлүүд хадгалагдана.
  2. Аргууд /Methods/ - Төрөл өөрийн талбарууд болон бусад өгөгдлүүд дээр хийж болох үйлдлүүд.
  3. Шинжүүд /Properties/ - Энэ бол төрлийн талбаруудтай илүү эвтэйхэн хандан ажиллах тусгай хэрэгсэл
  4. Үйл явдлууд /Events/ - Энэ нь төрөл өөртөө орсон өөрчлөлтийг бусад төрлүүдэд мэдэгдэх тусгай хэрэгсэл.
  5. Төрлийн байгуулагч /Constructor/ - Шинэ төрлийг үүсгэхэд дуудагдах тусгай арга.

  Нээгдсэн тоо: 352 Төлбөртэй

Литерал нь өөрчлөгдөхгүй утгыг илэрхийлнэ. (хааяа тэдгээрийг тогтмолууд гэж ч нэрлэдэг.) Литералуудыг хувьсагчид утгаар өгч болдог. Логик, бүхэл тоон, бодит тоон, тэмдэгт, мөрийн литералууд байж болно. null түлхүүр үг тусдаа литералийг илэрхийлнэ.

Логикийн литералууд

true (үнэн), false (худал) гэсэн хоёр логик тогтмол бий.

Console.WriteLine(true);
Console.WriteLine(false);

  Нээгдсэн тоо: 90 Бүртгүүлэх

Шаблоны арга (Template Method) хэв дэд классуудад алгоритмын бүтцийг өөрчлөхгүйгээр зарим алхамуудыг дахин тодорхойлох боломж олгосон ерөнхий алгоритмыг тодорхойлдог.

Хэвийг хаана ашиглах

  • Цаашид дэд классуудад алгоритмын бүтцийг өөрчлөхгүйгээр түүний зарим шатуудыг дахин тодорхойлох төлөвлөгөөтэй байх үед
  • Төстэй алгоритмыг хэрэгжүүлж буй классуудад кодын давхардал үүсэхэд. Ерөнхий кодыг хэвийн аргад гарснаар дэд классуудад түүний давхардалыг бууруулна.

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

Нээгдсэн тоо : 66

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

Нээгдсэн тоо : 95

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Нээгдсэн тоо : 101

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

Нээгдсэн тоо : 124

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

Нээгдсэн тоо : 125

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

Нээгдсэн тоо : 179

 

Хуваах нь нэг тоо нөгөө тоонд хэдэн удаа агуулагдаж буй тодорхойлох арифметикийн үйлдэл.
Хуваалтыг нэг бус удаа…

Нээгдсэн тоо : 120

 

Зуучлагч (Mediator) нь олон тооны обьектууд бие биетэйгээ холбоос үүсгэхгүйгээр харилцан ажиллах боломжийг хангах загварчлалын хэв юм. Ингэснээр…

Нээгдсэн тоо : 116

 

Делегатууд хичээлд ухагдхууны талаар дэлгэрэнгүй үзсэн ч жишээнүүд делегатийн хүчийг бүрэн харуулж чадахааргүй байсан.…

Нээгдсэн тоо : 128

 
Энэ долоо хоногт

Адил хажуут трапецын сууриуд 20 ба 12 см. Трапецыг багтаасан тойргийн төв их суурь дээр байрлах бол трапецын диагналыг ол.

Нээгдсэн тоо : 1169

 

тэгшитгэлийн язгууруудын нийлбэрийг ол.

Нээгдсэн тоо : 1089

 

Зурагт үзүүлсэн хагас тойрогт бол AB -ийн уртыг ол.

Нээгдсэн тоо : 840