Download - 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
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
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
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
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
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