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 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 төрлийг хатуугаар заасан байна. 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. Зарим алдаатай болон зөв бичлэг
Далд төрөлтэй дотоод массив
Хүснэгт-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 илэрхийлэлийг буцаах утга нь тодорхойгүй байдаг бөгөөд үүнийг далд төрөлтэй хувьсагч ашиглан барьж авдаг.
No comments:
Post a Comment