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 -ээс машиний код руу хөрвүүлнэ. Гэхдээ нэгэнт хөрвүүлэгдсэн кодийн хэсэг програмийн ажиллагааг дуустал хадгалагдах тул энэ нь бүтээмжийг /хурд/ дээшлүүлдэг.

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

  Нээгдсэн тоо: 370 Нийтийн

Нэг ерөнхийлөлтэй класс өөр ерөнхийлөлтэй классаас удамшиж болно. Ингэхдээ удамшилтын төрөл бүрийн хувилбаруудыг ашиглах боломжтой.   
Бидэнд дараах суурь

class Person<T>
{
    public T Id { get;}
    public Person(T id)
    {
        Id = id;
    }
}

Person класс байлаа гэе.

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

Олонлогийн тухай сэдвийг үргэлжлүүлэн үзье. C# -д олонлогийн хэдэн төрлүүд байдаг. Олонлогийн тухай ойлголт интерфейс ба ерөнхийлөлтэй их холбоотой тул хичээлийг үзэхээс өмнө интерфейс , ерөнхийлөл сэдвийн хичээлүүдийг судлахыг зөвлөе.

Цуглуулга /collection/

Одоо цуглуулга гэж юу болох талаар авч үзье. Цуглуулга өөрийн гишүүдийг нэмж, хасч, цэвэрлэж болдогоороо дарааллаас ялгаатай гэдгийг өмнөх хичээлд дурдсан. Дарааллын хувьд бид түүнийг үүсгэх дүрмийг давтагчийг /итератор/ ашиглан өгч болсон. Жишээ нь 3 ялгавартай арифметик прогресс.

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

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

Санамж. Програмчлалын хэлийг сурахад дадлага чухал үүрэгтэй. Жижиг гэлтгүй асуудлуудыг өөрөө шийдэхээс л дадлагажин код бичиж сурдаг. Эхлэн суралцагсад асуудлыг бэлэн сангууд ашиглан шийдэх гэдэг нь цаашид асуудал үүсгэх үндэс болдог. Хичээлийн жишээнүүдийг бэлэн сан ашиглан маш хурдан шийдэж болох ч чухам ямар ажиллагаануудыг хийсэнг мэдэлгүй өнгөрнө. Өөрөөр хэлбэл кодийн алгоритмийг ойлголгүй ажиллагааг шийднэ гэсэн үг. Ийм аргаар бүх асуудлыг шийдэх боломжгүй гэдэг нь тодорхой. Ер код бичих суурь бол асуудлыг шийдэх алгоритмыг зохиож сурах. Үүнд суралцахгүйгээр код бичиж сурахгүй гэдгийг сануулъя.

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

Давталт (Iterator) паттерн нийлмэл обьектын бүх элементүүдэд тэдгээрийн дотоод бүтцийг задлахгүйгээр хандах абстракт интерфейсийг тодорхойлдог. C# хэл дээр програм зохиогчид массив эсхүл коллекцийн обьектуудыг татан авдаг foreach циклтэй ажиллаж үзсэн байх. Энэ үед коллекцийн нийлмэл классуудад өөрийн бүтэц ба төлвөөрөө ялгаатай олонлог оршиж байдаг. Коллекцийг foreach -р гүйлгэн обьектуудыг авах боломжийг олгож байгаа түлхүүр хэрэгсэл бол давталт хэв буюу энгийнээр хэлбэл IEnumerable , IEnumerator хоёр интерфейс юм.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

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

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

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

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

тэгшитгэлийн нэг язгуур нь эерэг, нөгөө язгуур нь сөрөг байх параметрийн бүх утгыг ол.
Тэнцэтгэл бишийн нэг шийд нь M -ээс бага нөгөө шийд нь M -ээс их байх гарцаагүй ба хүрэлцээтэй нөхцөлийг ашиглавал болох бөгөөд энэ тэнцэтгэл бишийг бодвол үед манай тэнцэтгэл бишийн шийдийн нэг нь эерэг нөгөө нь сөрөг байна.

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

 

функц [1;9] завсарын аль хэсэгт буурах вэ?

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

 

функцийн хамгийн бага утгыг ол.

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