Классууд ба обьектууд

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

Обьектийн тодорхойлолт бол класс харин обьект бол энэ классийн хувийг илэрхийлнэ. Жишээ нь бидэнд хүний тухай нэр, нас, хүйс, гарал үүсэл, үндэстэн гэх мэтээр тодорхой төсөөлөл бий. Өөрөөр хэлбэл ерөнхий хэв юм. Энэхүү хэвийг класс гэж нэрлэж болно. Хэвийн тодорхой биелэлүүд өөр өөр байж болно. Жишээ нь нэг хүний нэр, нас,өндөр нөгөөгөөсөө өөр байх гэх мэтээр. Бодит хүн бол энэ классийн хувь.
Өмнөх хичээлүүдэд бид классууд ашиглаж байсан. Жишээ нь мөрийг илэрхийлэх string төрөл бол үнэндээ бол класс. Эсхүл консолд мэдээлэл үзүүлэх WriteLine() аргатай Console ч бас класс.

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

Одоо өөрсдийн классийг хэрхэн үүсгэхийг харцгаая. Ер нь класс бол хэрэглэгч тодорхойлж буй шинэ төрөл бөгөөд сlass түлхүүр үгээр тодорхойлогдоно.

class классийн_нэр
{
    // классийн агуулга
}

class түлхүүр үгийн араас классийн нэрийг өгөөд цааш хаалтанд классийн агуулга байрлана. Жишээ нь Program.cs файлд хүнийг төлөөлөх Person классыг тодорхойлбол

class Person
{
 
}

байна. Гэхдээ ийм класс тийм ч ойлгомжтой биш тул түүнд зарим ажиллагааг нэмье.

Классийн талбар ба аргууд

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

class Person 
{
    public string name = "Undefined";   // нэр
    public int age;                     // нас
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

нэмье. Дээрх кодоор Person класст нэр хадгалах name, нас хадгалах age талбаруудыг тодорхойлсон. Аргад тодорхойлогдох хувьсагчдаас классийн талбарууд модификатор /хандалтын боломж/ авч болдогоороо ялгаатай. Кодод талбарууд Person классийн гаднаас хандалттай байлгах үүднээс тэдгээрт public модификаторийг заан өгсөн байгаа. Талбарын тодорхойлолтод түүнд ямар нэгэн утгыг олгож болохыг name талбарын тодорхойлотоос харагдана. Хэрвээ классийн талбарт инициализац хийгээгүй бол тэдгээр нь төрлийнхөө анхдагч утгуудыг авна. Тоон төрлийн хувьсагчид энэ нь 0 байна.
Үүнээс гадна Person класст Print() аргыг тодорхойлсон. Классийн арга түүний талбаруудад хандах боломжтой бөгөөд кодод Print() арга name, age талбаруудын утгыг консолд гаргаж байгаа. Аргад классийн гаднаас хандах боломжийг олгох үүднээс түүнийг ч бас public модификатортой тодорхойлсон.

Классийн обьектыг үүсгэх

Классийн тодорхойлсоны дараа түүний обьектыг үүсгэх боломжтой. Обьектыг үүсгэхдээ байгуулагчийг (constructor) ашиглана. Байгуулагч нь класстай ижил нэртэй классийн шинэ обьектийг үүсгэхэд дуудагдан обьектийн инициализацийг хийдэг тусгай арга юм. Байгуулагч аргыг дуудах ерөнхий бичлэг.

new классийн_байгуулагч(параметрүүд);

байна. new оператор обьектод санах ой тусгаарлаад дараа нь байгуулагчийн дуудалтыг хийнэ.

Анхдагч байгуулагч

Класст (манай Person класс шиг) ямарч байгуулагч тодорхойлогдоогүй бол ямарч параметрүүд авдаггүй хоосон байгуулагч аргыг автоматаар үүсгэдэг.   
Person классийн обьектыг үүсгэе

Person tom = new Person();  // Person классийн обьектийг үүсгэх
// Person классийн тодорхойлолт
class Person
{
    public string name = "Undefined";
    public int age;
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

Person обьектыг үүсгэхдээ new Person() илэрхийллийг ашигласан. Илэрхийллээр Person обьектын бүх өгөгдлүүдийг хадгалах санах ойн хэсэг тусгаарлагдана. tom хувьсагч үүсгэгдсэн обьектын холбоосыг авах бөгөөд хувьсагчаар дамжуулан обьектын гишүүдэд хандан ашиглах боломжтой.

Классийн гишүүдэд хандах

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

объект.талбар
объект.арга(аргын параметрүүд)

Person классийн обьектийн элементүүдэд хандах жишээ

Person tom = new Person();  // Person классийн обьектыг үүсгэх
 
// Талбарын утгыг хувьсагчид авах
string personName = tom.name;
int personAge = tom.age;
Console.WriteLine($"Нэр: {personName} Нас {personAge}");   // Нэр: Undefined  Нас: 0
 
// талбарт шинэ утга олгох
tom.name = "Tom";
tom.age = 37;
 
// Print аргад хандах
tom.Print();    // Нэр: Tom  Нас: 37
 
class Person
{
    public string name = "Undefined";
    public int age;
 
    public void Print()
    {
        Console.WriteLine($"Нэр: {name}  Нас: {age}");
    }
}

Програм консолд

мэдээллийг үзүүлнэ.

Классийн тогтмол

Классийн талбарт тогтмол өгөгдлийг хадгалах тогтмолыг тодорхойлж болно. Талбараас ялгаатай нь тогтмолыг талбарын тодорхойлолтод нэг удаа шууд тавьдаг бөгөөд дараа нь утгыг өөрчлөх боломжгүй. Тогтмолууд ганцхан обьектод биш бүх класст хамааралтай өгөгдлийг хадгалдаг. Тогтмолд обьектын нэрээр биш классийн нэрээр ханддаг. Жишээ нь

Person tom = new Person();
tom.name = "Tom";
tom.age = 37;
tom.Print();    // Person: Tom - 37
 
Console.WriteLine(Person.type); // Person
// Person.type = "User";    // !Алдаа: тогтмолыг өөрчилж болохгүй
 
class Person
{
    public const string type = "Person";
    public string name = "Undefined";
    public int age;
    public void Print() => Console.WriteLine($"{type}: {name} - {age}");
}

Person класст классийн нэрийг хадгалах type тогтмолыг тодорхойлсон.

public const string type = "Person";

Классийн нэр обьектоос хамаарахгүй. Person классаас олон обьектийг үүсгэж болох ч классийн нэр өөр болох ёсгүй бөгөөд Person классийн бүх обьект ижил. Иймээс төрлийн нэрийг тогтмолд хадгалах боломжтой. Тогтмолд түүний тодорхойлолтод шууд утгыг олгох ёстойг сануулъя. Классийн дотроос тогтмолд ердийн талбарууд шиг хандах боломжтой. Жишээ нь

Console.WriteLine(Person.type); // Person

гэж Print аргаас тогтмолын утгыг консолд үзүүлж болно. Гэхдээ классийн гаднаас тогтмолд хандах болбол классийн нэрийг ашиглах хэрэгтэй. Жишээ нь    

Console.WriteLine(Person.type); // Person

Бүх класст хамааралтай өгөгдлийг хадгалах хэрэгтэй бол тогтмолыг ашиглаж болно.

Visual Studio -д классийг нэмэх

Классуудыг голдуу тусдаа файлд хадгалдаг. Нэг класс нэг файлд байх нь элбэг. Visual Studio боловсруулалтын орчинд классийн анхдагч хэвийг оруулан өгсөн байдаг.
Visual Studio -д класс нэмэхдээ төслийн нэр дээр баруун даралт хийхэд

нээгдэх цэсний Add -> New Item... (эсхүл Add -> Class...) командуудыг сонговол Add New Item

дэлгэц нээгдэнэ. Шинэ элемент нэмэх цонхны дунд орших элементүүдийн хэвүүдээс (шаблон) Class -ийг сонгоод Name талбарт нэмж буй классийнхаа нэрийг өгөөд Add товчийг дарна.
Классийн нэрийн талбарт Person эсхүл Person.cs гэсэн ч болох бөгөөд Add товчийг дарсаны дараа төсөлд

Person.cs нэртэй файл нэмэгдэнэ. Person.cs файлд нэг талбартай Print аргатай

class Person
{
    public string name = "Undefined";
    public void Print()
    {
        Console.WriteLine($"Person {name}");
    }
}

классийг тодорхойлъё. Үндсэн Program.cs файлд Person классийн хувийг үүсгээд

using ConsoleApp1;
Person tom = new Person();
tom.name = "Tom";
tom.Print();    // Person Tom

Програмаа ажлуулбал

үр дүнг өгнө. Ингэснээр бид классийг тусдаа файлд тодорхойлоод түүнийг програмдаа ашиглахыг сурлаа.

Жич: Эхэн үедээ ОХП төвөгтэй мэт санагдаж магадгүй ч та хичээвэл тийм ч хүнд биш гэдэгт итгээрэй.

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

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

Утга олгох үйлдэлд хоёр операнд оролцох бөгөөд зүүн операнд зөвхөн өөрчлөгдөж болох илэрхийлэл байх ёстой. Жишээ нь хувьсагч. C# -д бусад програмийн хэлүүдэд байдаг утга олголтын (=) суурь үйлдэл байдаг бөгөөд үйлдэл баруун операндийн утгыг зүүн операндад олгдог.  Жишээ нь

int number = 23;

Дээрх мөр number хувьсагчид 23 утгыг олгож байгаа. Энд number хувьсагч зүүн операнд буюу оролцогч.

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

C# -д аргад параметрийг утгаар ба холбоосоор дамжуулах гэсэн хоёр арга байдаг.

Параметрийг утгаар дамжуулах

Параметрийг дамжуулах хамгийн энгийн арга бол утгаар нь дамжуулах юм. Энэ бол параметрийг дамжуулах ердийн арга.

void Increment(int n)
{
    n++;
    Console.WriteLine($"Increment аргад дамжуулсан параметрийн утга: {n}");
}

int number = 5;
Console.WriteLine($"Increment аргын өмнөх number хувьсагч: {number}");
Increment(number);
Console.WriteLine($"Increment аргын дараах number хувьсагч: {number}");

Консолийн гаралт

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

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

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

Програмын ажиллагаанд өгөгдөлтэй ажиллах асуудал том байр суурийг эзэлдэг. Тэр дундаа өгөгдлийн сантай харилцан ажиллах нь ихээр тохиолдоно. Иймээс хичээлээр бид өгөгдлийн сантай ажиллах Entity Framework технологийн талаар авч үзэх юм. Сэдэв их өргөн агуулгатай тул хэдэн хичээлээр дамжин авч үзэх болно. Хичээлийн материалыг амархан ойлгохын тулд та

  • Холбоот өгөгдлийн сангийн суурь ойлголттой байх. Сайтын Sql хэл хэсгийн хичээлүүдээс энэ талаар судлан ойлгоорой.
  • .NET фреймворкийн олонлог буюу IEnumerable интерфейсийг ойлгон мэдсэн байх. Энэ талаар Олонлог /Sets/ хичээлээс үзэээрэй. Сэдвийг олон хичээлд хөндөж байсан болохоор та олонлогийг ойлгосон байх гэж бодож байгаа.  
  • Лямбда илэрхийлэл. Энд сэдвээр Лямбда илэрхийлэл гэсэн тусдаа хичээл байгаа.   
  • Илэрхийллийн мод ухагдхууны суурь ойлголтыг Илэрхийллийн мод хичээлээс ойлгосон байх.
  • Өгөгдлийн эх үүсвэр олонлог, массив, өгөгдлийн сан гэдгээс үл хамааран өгөгдөлтэй ажилладаг LINQ технологийн суурийг заавал мэдэж байх.

шаардлагатай. Дээрх ухагдхуунуудыг мэдэж ойлгосон байхад Entity Framework технологийг ойлгоход асуудал үүсэхгүй.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

Арифметик прогрессын ялгавар тэгтэй тэнцүү биш. Энэхүү прогрессын 1-р гишүүнийг 2-р гишүүнээр, 2-р гишүүнийг 3-р гишүүнээр, 3-р гишүүнийг 1-р гишүүнээр үржүүлэхэд гарах тоонууд өгөгдсөн дарааллаар геометрийн прогресс үүсгэдэг бол геометр прогессын хуваарийг ол.

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

 

Бөмбөрцөгт багтсан зөв дөрвөн өнцөгт пирамидийн суурь нь бөмбөрцөгийн төвийг дайрч байв. Пирамидийн эзэлхүүн 18-тай тэнцүү бол бөмбөрцөгийн радиусийг ол.

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

 

Зөв зургаан өнцөгт пирамидийн апофем h -тэй тэнцүү бөгөөд сууртай үүсгэх хоёр талст өнцөг 600 градус бол пирамидийн бүтэн гадаргуун талбайг ол.

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