lecture3

8
VCP413 Лекцийн материал Лекц №3 Сэдэв: Классын зохиомж 1. ОХП-ийн ухагдахуунууд Method Method нь классын функц, процедур юм. Классын функцийг тодорхойлж өгдөг. Класст объектыг үүсгэдэг; устгадаг үүрэгтэй байгуулагч(constructor), устгагч(destructor) гэсэн 2 method(функц) зайлшгүй байх ёстой. method-ууд нээлттэй, хаалттай, статик, виртуаль гэх мэт байж болно. Талбар Талбар нь тухайн класстай холбоотой хувсагч юм. Нээлттэй, хаалттай, статик, зөвхөн унших гэх мэт байж болно. С# хэлний синтакс (бичлэг) -тай танилцсаны дараа тааралдах болно. Шинж чанар Шинж чанар нь талбарын боломжийг өргөтгөдөг. Шинж чанарын тусламжтайгаар хаалттай талбараас унших, бичих гэх мэтээр хандаж хэрэглэгчийн гэнэтийн болон санаатай халдлага ас хамгаалдаг. С# классын төрөл Класс бол объектуудын ерөнхий шинж чанаруудыг агуулсан функц, хувьсагчдын цогц юм. Жишээ нь» : ажилчны нэр, ID, цалин зэрэг мэдээллийг, мөн цалинг тодорхой хэмжээгээр өсгөдөг GiveBonus(), мэдээлэл хэвлэж харуулдаг DisplayStats() функцуудыг агуулсан Emploуее класс тодорхойлъё. 1

Upload: orgil

Post on 12-May-2015

1.015 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Lecture3

VCP413 Лекцийн материал

Лекц №3

Сэдэв: Классын зохиомж

1. ОХП-ийн ухагдахуунууд

Method Method нь классын функц, процедур юм. Классын функцийг тодорхойлж өгдөг. Класст объектыг үүсгэдэг; устгадаг үүрэгтэй байгуулагч(constructor), устгагч(destructor) гэсэн 2 method(функц) зайлшгүй байх ёстой. method-ууд нээлттэй, хаалттай, статик, виртуаль гэх мэт байж болно.

ТалбарТалбар нь тухайн класстай холбоотой хувсагч юм. Нээлттэй, хаалттай, статик, зөвхөн унших гэх мэт байж болно. С# хэлний синтакс (бичлэг) -тай танилцсаны дараа тааралдах болно.

Шинж чанарШинж чанар нь талбарын боломжийг өргөтгөдөг. Шинж чанарын тусламжтайгаар хаалттай талбараас унших, бичих гэх мэтээр хандаж хэрэглэгчийн гэнэтийн болон санаатай халдлага ас хамгаалдаг.

С# классын төрөлКласс бол объектуудын ерөнхий шинж чанаруудыг агуулсан функц, хувьсагчдын цогц юм. Жишээ нь» : ажилчны нэр, ID, цалин зэрэг мэдээллийг, мөн цалинг тодорхой хэмжээгээр өсгөдөг GiveBonus(), мэдээлэл хэвлэж харуулдаг DisplayStats() функцуудыг агуулсан Emploуее класс тодорхойлъё.

Зураг 1 Етрloyee

C#-ийн класс хэрэлэгчийн тодорхойлсон хэд хэдэн байгуулагчтай байж болох ба класс бүр утга авдггүй анхдагч байгуулагчтай байдаг.using System;namespace Employees{ public class Employee

1

Page 2: Lecture3

VCP413 Лекцийн материал

{private string fullName;private int empID;private float currPay;

// áàéãóóëàã÷èäpublic Employee(){ }public Employee(string fullName, int empID, float currPay){this.fullName = fullName;this.empID = empID;this.currPay = currPay;}public void GiveBonus(float amount){ currPay += amount; }public void DisplayStats(){Console.WriteLine(“Name: {0} “, fullName);Console.WriteLine(“Pay: {0} “, currPay);Console.WriteLine(“ID: {0} “, empID);}

//Employee êëàññûí àíõäàã÷ áàéãóóëàã÷ õîîñîí áàéíà:/*public class Employee{//...public Employee(){ }//...}*/

// Õýðýâ òà êëàññ äîòîð õýðýãëýã÷èéí áàéãóóëàã÷èéã// òîäîðõîéëñîí ë áîë àíõäàã÷ áàéãóóëàã÷ óñòäàã. //Çà îäîî êëàññûí æèøýý ¿¿ñãýå:

static void Main(string[] args){ // àíõäàã÷ áàéãóóëàã÷èéã äóóäíà

Employee e = new Employee();} } }Дараахь Main() функц хэрэглэгчийн тодорхойлсон 3 байгуулагч ашиглан хэд хэдэн

Emplоуее объект үүсгэж байна:static void Main(string[] args){ Employee e = new Employee(“Joe”, 80, 30000);

Employee e2;e2 = new Employee(“Beth”, 81, 50000);Console.ReadLine(); }

2

Page 3: Lecture3

VCP413 Лекцийн материал

Далд төрөлтэй дотоод хувьсагч (Implicitly Typed Local Variables)

C# 2008-нд гарсан нэг шинэ зүйл далд төрөлтэй дотоод хувьсагч зарлах боломжтой болсын байна. Энэ скрипт (script)хэлүүдэд ихэвчлэн ашиглагддаг хувьсагч хэрэглэлтйин техникыг авч хэрэгжүүлсэн байна. Энэ хүснэгт-1 болон хүснэгт- 2дээрх жишээн дээр тулгуурлан тайлбарлъя.

static void DeclareExplicitVars(){

//Энгийн хувьсагчдын зарлалт;int myInt = 0;bool myBool = true;string myString = "Time, marches on...";

}Хүснэгт- 1. Энгийн төрөл зарлалттай функц

Хүснэгт-1 функцад бидний мэдэх int, bool, string түлхүүр үгүүдийг ашиглаж хувьсагчийн зарлалтаа хийсэн байна.

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);

}Хүснэгт- 2. Далд төрлийг ашигласан функц

Харин хүснэгт-2д var гэсэн шинэ түлхүүр үг гарч ирсэн байна. Энэ тохиолдолд компайлар автоматаар myInt, myBool, myString-д харгалзан System.Int32, System.Boolean, System.String санах ойн хувиарлалт хийдэг.Одоо массив, ерөнхий төрөл мөн хэрэглэгчийн тодорхойлсон төрөл дээр хэрхэн ашиглахыг хүснэгт-3д харууллаа.

static void DeclareImplicitVars(){

...// Зарим далд өгөгдлын төрөлтэй дотоод хувьсагчvar evenNumbers = new int[] { 2, 4, 6, 8 };var myMinivans = new List();

3

Page 4: Lecture3

VCP413 Лекцийн материал

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);

}Хүснэгт- 3. Далд хувьсагчийг бусад өгөгдлийн төрөлд

ашиглах ньУг жишээнд Системийн жагсаалт, массив өгөгдлийн төрөл болон хэрэглэгчийн тодорхойлж өгсөн SportsCar төрлийн зарлалт, болон утга оноолтыг харуулсан байна. Зураг-3 DeclareImplicitVars() функцыг ажиллуусан үр дүнг харууллаа.

Зураг-3 DeclareImplicitVars() гаралтын үр дүн

Foreach дэх var төрөлтэй хувьсагчДалд төрөл нь int массиван var төрлийн хувьсагчид дараалсан давталтанд хэрхэн хандахыг хүснэгт-4д харуулав.

static void VarInForeachLoop(){

var evenNumbers = new int[] { 2, 4, 6, 8 };// “var” foreach давталданд ашиглах нь .foreach (var item in evenNumbers){Console.WriteLine("Item value: {0}", item);}

}Хүснэгт- 4. “var” foreach давталтанд ашиглах нь

Мөн давталт дотроо хүснэгтийн төрлийг хатуугаар зааж өгч гүйх боломжтой хүснэгт-4 ийн кодыг ийм байдалд өөрчилснөөр харуулбал(Хүснэгт-5).

static void VarInForeachLoop(){

var evenNumbers = new int[] { 2, 4, 6, 8 };// System.Int32 төрлийг хатуугаар заасан байна.

4

Page 5: Lecture3

VCP413 Лекцийн материал

foreach (int item in evenNumbers){Console.WriteLine("Item value: {0}", item);}

}Хүснэгт- 5. foreach давталтанд төрөл хатуугаар заах

Далд төрөлтэй хувьсагч дахь хязгаарлагдмал байдалБид уг хувьсагчийг method болон propterty-д зөвхөн дотоод хувьсагчын хүрээнд л ашиглаж болно. Мөн var түлхүүр үгийг функцийн буцаах утга, параметр, field –үүдэд хэрэглэвэл алдаатай(Хүснэгт-6).

class ThisWillNeverCompile{

//field өгөгдөлд ашигласан, алдаа!private var myInt = 10;// буцаах утга болон параметерт хэрэглэсэн, алдаа!public var MyMethod(var x, var y){}

}Хүснэгт- 6. Алдаатай код

Бусад хориглолт болон байж болох хувилбаруудыг хүснэгт-7д жишээгээр харууллаа.

//Утга олгоогүй, алдаа!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;

}Хүснэгт- 7. Зарим алдаатай болон зөв бичлэг

5

Page 6: Lecture3

VCP413 Лекцийн материал

Далд төрөлтэй дотоод массивХүснэгт-8 жишээгээр далд төрөлтэй массиван хувьсагчийн хэрхэн заралхыг харууллаа.

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 };

}Хүснэгт- 8. Далд төрөлтэй массив

Далд төрөлтэй хувьсагчыг LINQ технолгид ашигладаг учир нь query илэрхийлэлийг буцаах утга нь тодорхойгүй байдаг бөгөөд үүнийг далд төрөлтэй хувьсагч ашиглан барьж авдаг.

6