Лекц №3<br />Сэдэв: Классын зохиомж<br /><ul><li>ОХП-ийн ухагдахуунууд</li></ul>Method  <br />Method нь классын функц, про...
Lecture3
Lecture3
Lecture3
Lecture3
Lecture3
Upcoming SlideShare
Loading in...5
×

Lecture3

1,023

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,023
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
36
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lecture3

  1. 1. Лекц №3<br />Сэдэв: Классын зохиомж<br /><ul><li>ОХП-ийн ухагдахуунууд</li></ul>Method <br />Method нь классын функц, процедур юм. Классын функцийг тодорхойлж өгдөг. Класст объектыг үүсгэдэг; устгадаг үүрэгтэй байгуулагч(constructor), устгагч(destructor) гэсэн 2 method(функц) зайлшгүй байх ёстой. method-ууд нээлттэй, хаалттай, статик, виртуаль гэх мэт байж болно.<br /> Талбар<br />Талбар нь тухайн класстай холбоотой хувсагч юм. Нээлттэй, хаалттай, статик, зөвхөн унших гэх мэт байж болно. С# хэлний синтакс (бичлэг) -тай танилцсаны дараа тааралдах болно.<br />Шинж чанар<br />Шинж чанар нь талбарын боломжийг өргөтгөдөг. Шинж чанарын тусламжтайгаар хаалттай талбараас унших, бичих гэх мэтээр хандаж хэрэглэгчийн гэнэтийн болон санаатай халдлага ас хамгаалдаг.<br />С# классын төрөл<br />Класс бол объектуудын ерөнхий шинж чанаруудыг агуулсан функц, хувьсагчдын цогц юм. Жишээ нь» : ажилчны нэр, ID, цалин зэрэг мэдээллийг, мөн цалинг тодорхой хэмжээгээр өсгөдөг GiveBonus(), мэдээлэл хэвлэж харуулдаг DisplayStats() функцуудыг агуулсан Emploуее класс тодорхойлъё.<br />Зураг 1 Етрloyee<br />C#-ийн класс хэрэлэгчийн тодорхойлсон хэд хэдэн байгуулагчтай байж болох ба класс бүр утга авдггүй анхдагч байгуулагчтай байдаг.<br />using System;<br />namespace Employees<br />{ public class Employee<br />{<br />private string fullName;<br />private int empID;<br />private float currPay;<br />// áàéãóóëàã÷èä<br />public Employee(){ }<br />public Employee(string fullName, int empID, float currPay)<br />{<br />this.fullName = fullName;<br />this.empID = empID;<br />this.currPay = currPay;<br />}<br />public void GiveBonus(float amount)<br />{ currPay += amount; }<br />public void DisplayStats()<br />{<br />Console.WriteLine(“Name: {0} “, fullName);<br />Console.WriteLine(“Pay: {0} “, currPay);<br />Console.WriteLine(“ID: {0} “, empID);<br />}<br />//Employee êëàññûí àíõäàã÷ áàéãóóëàã÷ õîîñîí áàéíà:<br />/*public class Employee<br />{<br />//...<br />public Employee(){ }<br />//...<br />}*/<br />// Õýðýâ òà êëàññ äîòîð õýðýãëýã÷èéí áàéãóóëàã÷èéã<br />// òîäîðõîéëñîí ë áîë àíõäàã÷ áàéãóóëàã÷ óñòäàã. <br />//Çà îäîî êëàññûí æèøýý ¿¿ñãýå:<br />static void Main(string[] args)<br />{// àíõäàã÷ áàéãóóëàã÷èéã äóóäíà<br />Employee e = new Employee();<br />}}}<br />Дараахь Main() функц хэрэглэгчийн тодорхойлсон 3 байгуулагч ашиглан хэд хэдэн <br />Emplоуее объект үүсгэж байна:<br />static void Main(string[] args)<br />{Employee e = new Employee(“Joe”, 80, 30000);<br />Employee e2;<br />e2 = new Employee(“Beth”, 81, 50000);<br />Console.ReadLine(); }<br /> Далд төрөлтэй дотоод хувьсагч (Implicitly Typed Local Variables)<br />C# 2008-нд гарсан нэг шинэ зүйл далд төрөлтэй дотоод хувьсагч зарлах боломжтой болсын байна. Энэ скрипт (script)хэлүүдэд ихэвчлэн ашиглагддаг хувьсагч хэрэглэлтйин техникыг авч хэрэгжүүлсэн байна. Энэ хүснэгт-1 болон хүснэгт- 2дээрх жишээн дээр тулгуурлан тайлбарлъя.<br />static void DeclareExplicitVars(){//Энгийн хувьсагчдын зарлалт;int myInt = 0;bool myBool = true;string myString = " Time, marches on..." ;}<br />Хүснэгт- 1. Энгийн төрөл зарлалттай функц<br />Хүснэгт-1 функцад бидний мэдэх int, bool, string түлхүүр үгүүдийг ашиглаж хувьсагчийн зарлалтаа хийсэн байна.<br />static void DeclareImplicitVars(){// Далд хувьсагчын зарлалт// var variableName = initialValue;var myInt = 0;var myBool = true;var myString = " Time, marches on..." ;// Print out the underlying type.Console.WriteLine(" myInt is a: {0}" , myInt.GetType().Name);Console.WriteLine(" myBool is a: {0}" , myBool.GetType().Name);Console.WriteLine(" myString is a: {0}" , myString.GetType().Name);}<br />Хүснэгт- 2. Далд төрлийг ашигласан функц<br />Харин хүснэгт-2д var гэсэн шинэ түлхүүр үг гарч ирсэн байна. Энэ тохиолдолд компайлар автоматаар myInt, myBool, myString-д харгалзан System.Int32, System.Boolean, System.String санах ойн хувиарлалт хийдэг.<br />Одоо массив, ерөнхий төрөл мөн хэрэглэгчийн тодорхойлсон төрөл дээр хэрхэн ашиглахыг хүснэгт-3д харууллаа.<br />static void DeclareImplicitVars(){...// Зарим далд өгөгдлын төрөлтэй дотоод хувьсагчvar evenNumbers = new int[] { 2, 4, 6, 8 };var myMinivans = new List();var myCar = new SportsCar();Console.WriteLine(" evenNumbers is a: {0}" , evenNumbers.GetType().Name);Console.WriteLine(" myMinivans is a: {0}" , myMinivans.GetType().Name);Console.WriteLine(" myCar is a: {0}" , myCar.GetType().Name);}<br />Хүснэгт- 3. Далд хувьсагчийг бусад өгөгдлийн төрөлд ашиглах нь<br />Уг жишээнд Системийн жагсаалт, массив өгөгдлийн төрөл болон хэрэглэгчийн тодорхойлж өгсөн SportsCar төрлийн зарлалт, болон утга оноолтыг харуулсан байна. Зураг-3 DeclareImplicitVars() функцыг ажиллуусан үр дүнг харууллаа.<br />Зураг-3 DeclareImplicitVars() гаралтын үр дүн<br />Foreach дэх var төрөлтэй хувьсагч<br />Далд төрөл нь int массиван var төрлийн хувьсагчид дараалсан давталтанд хэрхэн хандахыг хүснэгт-4д харуулав.<br />static void VarInForeachLoop(){var evenNumbers = new int[] { 2, 4, 6, 8 };// “var” foreach давталданд ашиглах нь .foreach (var item in evenNumbers){Console.WriteLine(" Item value: {0}" , item);}}<br />Хүснэгт- 4. “var” foreach давталтанд ашиглах нь<br />Мөн давталт дотроо хүснэгтийн төрлийг хатуугаар зааж өгч гүйх боломжтой хүснэгт-4 ийн кодыг ийм байдалд өөрчилснөөр харуулбал(Хүснэгт-5).<br />static void VarInForeachLoop(){var evenNumbers = new int[] { 2, 4, 6, 8 };// System.Int32 төрлийг хатуугаар заасан байна.foreach (int item in evenNumbers){Console.WriteLine(" Item value: {0}" , item);}}<br />Хүснэгт- 5. foreach давталтанд төрөл хатуугаар заах<br />Далд төрөлтэй хувьсагч дахь хязгаарлагдмал байдал<br />Бид уг хувьсагчийг method болон propterty-д зөвхөн дотоод хувьсагчын хүрээнд л ашиглаж болно. Мөн var түлхүүр үгийг функцийн буцаах утга, параметр, field –үүдэд хэрэглэвэл алдаатай(Хүснэгт-6).<br />class ThisWillNeverCompile{//field өгөгдөлд ашигласан, алдаа!private var myInt = 10;// буцаах утга болон параметерт хэрэглэсэн, алдаа!public var MyMethod(var x, var y){}}<br />Хүснэгт- 6. Алдаатай код<br />Бусад хориглолт болон байж болох хувилбаруудыг хүснэгт-7д жишээгээр харууллаа.<br />//Утга олгоогүй, алдаа!var myData;//Зарлалтын үед утга олгоогүй, алдаа!var myInt;myInt = 0;//Null утга олгосон, алдаа!var myObj = null;//Утга олголгдсоны дараа заалт төрөлтэй болох учир энд ямар нэгэн алдаа үүсэхгүйvar myCar = new SportsCar();myCar = null;// Зөв!var myInt = 0;var anotherInt = myInt;string myString = " Wake up!" ;var myData = myString;//буцаах утгын төрөл нь int бөгөөд далд төрөл нь таарч байна, зөв!static int GetAnInt(){var retVal = 9;return retVal;}<br />Хүснэгт- 7. Зарим алдаатай болон зөв бичлэг<br />Далд төрөлтэй дотоод массив<br />Хүснэгт-8 жишээгээр далд төрөлтэй массиван хувьсагчийн хэрхэн заралхыг харууллаа.<br />static void DeclareImplicitArrays(){// int[].var a = new[] { 1, 10, 100, 1000 };Console.WriteLine(" a is a: {0}" , a.ToString());// double[].var b = new[] { 1, 1.5, 2, 2.5 };Console.WriteLine(" b is a: {0}" , b.ToString());// string[].var c = new[] { " hello" , null, " world" };Console.WriteLine(" c is a: {0}" , c.ToString());// SportsCar[].var myCars = new[] { new SportsCar(), new SportsCar() };Console.WriteLine(" myCars is a: {0}" , myCars.ToString());Console.WriteLine();//System.Object төрлийн массивыг үүсгэх боломжгүй. Хувьсагчийн төрөл холилдно, алдаа!//Компайларын алдаа гарнаvar d = new[] { 1, " one" , 2, " two" , false };}<br />Хүснэгт- 8. Далд төрөлтэй массив<br />Далд төрөлтэй хувьсагчыг LINQ технолгид ашигладаг учир нь query илэрхийлэлийг буцаах утга нь тодорхойгүй байдаг бөгөөд үүнийг далд төрөлтэй хувьсагч ашиглан барьж авдаг.<br />

×