Counter.CountDown cd1 = new Counter.CountDown (10);
Ushbu qoidani umumlashtirish mumkin: har doim nom fazosining a'zosi ishlatilsa, uning nomi ushbu nom fazosi yordamida qo'shimcha ravishda aniqlanishi kerak. Aks holda, nom fazosining a'zosi kompilyator tomonidan topilmaydi.
Ikkinchidan, Counter turidagi ob'ekt yaratilgandan so'ng, uning nomlarini bo'shliq yordamida qo'shimcha ravishda belgilashga hojat yo'q. Shuning uchun, quyidagi kod satrida bo'lgani kabi, nom fazosini ko'rsatmasdan to'g'ridan-to'g'ri cd1.Count() usulini chaqirish mumkin.
i = cd1.Count ();
Uchinchidan, misol ravshanligi uchun bu yerda ko'rib chiqilgan dastur ikkita alohida faylga bo'lingan. Bir faylda Counter nom fazosini e'lon qilish uchun kod, ikkinchisida NSDemo dasturining o'zi uchun kod mavjud.
Ammo ikkala kod bo'lagi ham bitta faylga birlashtirilishi mumkin edi. Bundan tashqari, bitta manba faylida o'z e'lon maydonlariga ega bo'lgan ikki yoki undan ortiq nom bo'shliqlari bo'lishi mumkin. Ichki nom fazosi tugagandan so'ng, tashqi nom fazosi qayta tiklanadi - Counter misolida bu global nom fazosi. Aniqlik uchun quyidagi misollarda dastur talab qiladigan barcha nomlar bir xil faylda taqdim etiladi. Shunga qaramay, ularni alohida fayllarga tarqatishga ruxsat berilganligini yodda tutish kerak, bu ko'pincha chiqish kodida qo'llaniladi.
Nomlar fazosii bilan to'qnashuvlarning oldini olish.
Nomlar fazosiining asosiy afzalligi shundaki, ularda e'lon qilingan ismlar ularning tashqarisida e'lon qilingan nomlarga zid kelmaydi. Masalan, quyidagi dastur ikkita nom fazosini belgilaydi. Birinchisi, ilgari kiritilgan Counter nom fazosi, ikkinchisi Counter2. Ikkala nomlar fazosii ham bir xil nomdagi sinflarni o'z ichiga oladi CountDown, lekin ular har xil bo'shliqlar bo'lgani uchun ikkala CountDown sinflari bir-biriga zid kelmaydi. Bundan tashqari, ikkala nom fazosi ham bitta faylda aniqlanadi. Yuqorida aytib o'tilganidek, bu juda yaxshi qabul qilinadi. Albatta, agar zarurat tug'ilsa, ushbu nomlar fazosiining har birini alohida faylga bo'lish mumkin.
// Nomlar fazosii nomlarning to'qnashuviga yo'l qo'ymaydi.
using Counter'>System;
// Nom fazosi hisoblagichini e'lon qiling,
namespace Counter {
// Oddiy ayirboshlash hisoblagichi,
class CountDown { int val;
public CountDown(int n) {
val = n;
}
public void Reset(int n) {
val = n;
}
public int Count() {
if(val > 0) return val--;
else return 0;
}
}
}
// Counter2 nom fazosini e'lon qiling.
namespace Counter2 {
/ * Ushbu sinf CountDown Counter2 nom fazosiga tegishli va shuning uchun Counter nomlar fazosidagi o'xshash sinfga zid kelmaydi. * /
class CountDown {
public void Count() {
Console.WriteLine("Bu Counter2 nom fazosidan Count () usuli.");
}
}
}
class NSDemo2 {
static void Main() {
// Bu Counter nom fazosidan CountDown klassi.
Do'stlaringiz bilan baham: |