Turlar va o'zgaruvchilar
A turi C # har qanday ma'lumotlar tuzilishi va xatti belgilaydi. Tur deklaratsiyasi uning a'zolarini, asosiy turini, u amalga oshiradigan interfeyslarni va ushbu tur uchun ruxsat etilgan operatsiyalarni o'z ichiga olishi mumkin. A o'zgaruvchan muayyan turdagi bir misol anglatadi bir teg bo'ladi.
C# da ikki xil tur mavjud: qiymat turlari va mos yozuvlar turlari . Qiymat turlarining o'zgaruvchilari bevosita ularning ma'lumotlarini o'z ichiga oladi. Malumot turlarining o'zgaruvchilari o'z ma'lumotlariga havolalarni saqlaydi, ikkinchisi ob'ektlar sifatida tanilgan. Malumot turlari bilan ikkita o'zgaruvchi bir xil ob'ektga murojaat qilishi mumkin va bitta o'zgaruvchidagi operatsiyalar boshqa o'zgaruvchi tomonidan havola qilingan ob'ektga ta'sir qilishi mumkin. Qiymat turlari bilan o'zgaruvchilarning har biri ma'lumotlarning o'z nusxasiga ega va birida operatsiyalar ikkinchisiga ta'sir qilishi mumkin emas ( refva outparametr o'zgaruvchilari bundan mustasno ).
An identifikator bir o'zgaruvchi ism. Identifikator - bu bo'shliqsiz unicode belgilar ketma-ketligi. Identifikator, agar u prefiks bilan qo'yilgan bo'lsa, C# tomonidan ajratilgan so'z bo'lishi mumkin @. Identifikator sifatida zaxiralangan so'zdan foydalanish boshqa tillar bilan muloqot qilishda foydali bo'lishi mumkin.
C# ning qiymat turlari yana oddiy turlarga , enum turlariga , struktura turlariga , null qiymat turlariga va kortej qiymat turlariga bo'linadi . C# ning mos yozuvlar turlari o'z navbatida sinf turlari , interfeys turlari , massiv turlari va delegat turlariga bo'linadi .
Quyidagi sxema C# tipidagi tizimning umumiy ko'rinishini beradi.
Qiymat turlari
Oddiy turlar
Belgilangan integral : sbyte, short, int,long
Ishorasiz integral : byte, ushort, uint,ulong
Unicode belgilar : charUTF-16 kod birligini ifodalaydi
IEEE ikkilik suzuvchi nuqta : float,double
Yuqori aniqlikdagi o'nlik suzuvchi nuqta :decimal
Boolean: boolbor mantiqiy qiymatlar-qadriyatlarni anglatadi yo trueyokifalse
Enum turlari
Shaklning foydalanuvchi tomonidan belgilangan turlari enum E {...}. Tur enum- nomli konstantalarga ega bo'lgan alohida tur. Har bir enumturning asosiy turi bor, u sakkizta integral turdan biri bo'lishi kerak. Turning qiymatlari enumto'plami asosiy turdagi qiymatlar to'plami bilan bir xil bo'ladi.
Struktura turlari
Shaklning foydalanuvchi tomonidan belgilangan turlari struct S {...}
Null qiymat turlari
Bilan boshqa barcha qiymati turdagi Extensions nullqiymati
Tuple qiymat turlari
Shaklning foydalanuvchi tomonidan belgilangan turlari (T1, T2, ...)
Malumot turlari
Sinf turlari
Boshqa barcha turlarning yakuniy tayanch klassi: object
Unicode satrlari : string, UTF-16 kod birliklari ketma-ketligini ifodalaydi
Shaklning foydalanuvchi tomonidan belgilangan turlari class C {...}
Interfeys turlari
Shaklning foydalanuvchi tomonidan belgilangan turlari interface I {...}
Massiv turlari
Bir o'lchovli, ko'p o'lchovli va qirrali. Masalan: int[], int[,], vaint[][]
Delegat turlari
Shaklning foydalanuvchi tomonidan belgilangan turlari delegate int D(...)
C# dasturlari yangi turlarni yaratish uchun tip deklaratsiyasidan foydalanadi . Tur deklaratsiyasi yangi turdagi nom va a'zolarni belgilaydi. C# toifalarining oltitasi foydalanuvchi tomonidan aniqlanishi mumkin: sinf turlari, tuzilma turlari, interfeys turlari, enum turlari, delegatlar turlari va kortej qiymatlari turlari. Shuningdek , siz yoki yoki recordturlarini e'lon qilishingiz mumkin . Yozuv turlari kompilyator-sintezlangan a'zolarga ega. Yozuvlardan asosan qiymatlarni saqlash uchun foydalanasiz, ular bilan bog'liq bo'lgan minimal xatti-harakatlar.record structrecord class
A classturi ma'lumotlar a'zolari (joylar) va funktsiya a'zolari (usullari, xususiyatlari va boshqalar) o'z ichiga olgan ma'lumotlar tuzilishini belgilaydi. Sinf turlari yagona meros va polimorfizmni qo'llab-quvvatlaydi, mexanizmlar hosil bo'lgan sinflar asosiy sinflarni kengaytirishi va ixtisoslashtirishi mumkin.
Tur structsinf tipiga o'xshaydi, chunki u ma'lumotlar a'zolari va funktsiya a'zolari bilan tuzilmani ifodalaydi. Biroq, sinflardan farqli o'laroq, tuzilmalar qiymat turlari bo'lib, odatda to'p ajratishni talab qilmaydi. Struktura turlari foydalanuvchi tomonidan belgilangan merosni qo'llab-quvvatlamaydi va barcha struktura turlari bilvosita type dan meros bo'lib qoladi object.
An interfaceturi jamoatchilik a'zolari bir nomli to'plami sifatida shartnoma belgilaydi. A classyoki structamalga oshiradigan interfaceinterfeys a'zolarining amalga oshirilishini ta'minlashi kerak. An bir interfacenechta asosiy interfeyslarni meros qilib olishi mumkin va a classyoki structbir nechta interfeyslarni amalga oshirishi mumkin.
Tur delegatema'lum parametrlar ro'yxati va qaytish turiga ega usullarga havolalarni ifodalaydi. Delegatlar usullarni o'zgaruvchilarga tayinlanishi va parametr sifatida uzatilishi mumkin bo'lgan ob'ektlar sifatida ko'rib chiqishga imkon beradi. Delegatlar funktsional tillar tomonidan taqdim etilgan funksiya turlariga o'xshashdir. Ular, shuningdek, ba'zi boshqa tillarda joylashgan funktsiya ko'rsatkichlari tushunchasiga o'xshaydi. Funksiya ko'rsatkichlaridan farqli o'laroq, delegatlar ob'ektga yo'naltirilgan va turdagi xavfsizdir.
class, struct, interface, Va delegateturlari, ular boshqa turlari bilan InGaN mumkin qaerga barcha qo'llab-quvvatlash tovar.
C# har qanday turdagi bir o'lchovli va ko'p o'lchovli massivlarni qo'llab-quvvatlaydi. Yuqorida sanab o'tilgan turlardan farqli o'laroq, massiv turlarini ishlatishdan oldin e'lon qilish shart emas. Buning o'rniga, massiv turlari kvadrat qavslar bilan tur nomiga rioya qilish orqali tuziladi. Misol uchun, int[]bir-o'lchovli qator int, int[,]ikki o'lchovli qator bo'lib int, va int[][]yagona-o'lchovli, tillo bir-o'lchovli, qator yoki "taram" majmuasini, deb int.
Null bo'ladigan turlar alohida ta'rifni talab qilmaydi. Har bir null bo'lmagan tur Tuchun tegishli null bo'ladigan turi mavjud bo'lib T?, u qo'shimcha qiymatga ega bo'lishi mumkin null. Masalan, int?har qanday 32 bitli butun sonni yoki qiymatini ushlab turadigan tur nullva string?istalgan stringyoki qiymatini ushlab turadigan tur null.
C# tipidagi tizim shunday birlashtirilganki, har qanday turdagi qiymatni object. C# tilidagi har bir tur to'g'ridan-to'g'ri yoki bilvosita objectsinf turidan kelib chiqadi va objectbarcha turlarning yakuniy tayanch sinfidir. Malumot turlarining qiymatlari, qiymatlarni tur sifatida ko'rish orqali ob'ektlar sifatida ko'rib chiqiladi object. Qiymat turlarining qiymatlari boks va qutidan chiqarish operatsiyalarini bajarish orqali ob'ektlar sifatida ko'rib chiqiladi . Quyidagi misolda intqiymat ga objectva yana ga aylantiriladi int.
C#Nusxalash
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
Qiymat turining qiymati objectmos yozuvlar uchun tayinlanganda, qiymatni saqlash uchun "quti" ajratiladi. Bu quti mos yozuvlar turining namunasidir va qiymat ushbu qutiga ko'chiriladi. Aksincha, objecthavola qiymat turiga o'tkazilganda, havola qilingan objectqiymat to'g'ri turdagi quti ekanligi tekshiriladi. Tekshirish muvaffaqiyatli bo'lsa, qutidagi qiymat qiymat turiga ko'chiriladi.
C# ning yagona turdagi tizimi samarali qiymat turlariga object"talab bo'yicha" havola sifatida qaralishini anglatadi . Birlashtirilganligi sababli, turini ishlatadigan umumiy maqsadli kutubxonalar objectdan kelib chiqadigan barcha turlar object, shu jumladan mos yozuvlar turlari va qiymat turlari bilan ishlatilishi mumkin.
C# da maydonlar, massiv elementlari, mahalliy o'zgaruvchilar va parametrlarni o'z ichiga olgan bir necha turdagi o'zgaruvchilar mavjud. O'zgaruvchilar saqlash joylarini ifodalaydi. Har bir o'zgaruvchi quyida ko'rsatilganidek, o'zgaruvchida qanday qiymatlarni saqlash mumkinligini aniqlaydigan turga ega.
Null bo'lmagan qiymat turi
Null qiymat turi
A nullqiymati yoki aniq turdagi bir qiymat
ob'ekt
A nullyozuvlar, har qanday yozuvlar turdagi ob'ektga mos yozuvlar yoki har qanday qiymati turdagi Ambalajlı qiymatiga mos yozuvlar
Sinf turi
A nullyozuvlar, bu sinf turlari Misol uchun, mos yozuvlar yoki sinf misoli bir yozuvlar deb sinf turi olingan
Interfeys turi
A nullyozuvlar, bir sinf turdagi misol uchun, bir Malumot deb amalga interfeysi turi, yoki qiymati turdagi Ambalajlı qiymatiga bir mos yozuvlar deb asbob deb interfeysi turi
Massiv turi
A nullyozuvlar, deb array turdagi misol uchun mos yozuvlar, yoki mos keluvchi array turdagi misol uchun mos yozuvlar
Delegat turi
A nullyozuvlar yoki mos keluvchi vakil turdagi misol uchun mos yozuvlar
Do'stlaringiz bilan baham: |