C# ve .net [8]
![C# ve .net [8] C# ve .net [8]](https://nabfollower.com/blog/wp-content/uploads/2025/04/C-ve-net-8-780x470.png)
مقدمه: نیازهای سازمان در کد اقیانوس
هنگامی که ما یک برنامه C# کوچک را تایپ می کنیم ، ممکن است کافی باشد که تمام کلاس ها و گونه های دیگر خود را در یک زمینه جهانی در یک فایل واحد یا در چندین پرونده تعریف کنیم. با این حال ، با رشد پروژه ها ، صدها یا حتی هزاران کلاس ، ساختار ، رابط و غیره. وقتی شروع به گنجاندن می کند ، همه چیز پیچیده می شود.
در صورت عدم وجود نامی ، مشکلاتی که باید با آنها روبرو شوید:
نامگذاری برخورد: این بزرگترین مشکل است. توسعه دهندگان مختلف یا کتابخانه های مختلف می توانند کلاس ها یا گونه ها را با همین نام تعریف کنند ، حتی اگر برای همان هدف نباشند. به عنوان مثال ، هم در پروژه شما و هم در یک کتابخانه سوم که از آن استفاده می کنید می تواند کلاس به نام Logger باشد. بدون زمینه های اسم ، کامپایلر نمی داند از کدام کلاس Logger استفاده کند ، و این منجر به خطای یک مجموعه یا بدتر از آن می شود که در محل کار در محل کار قرار دارد. همه گونه ها باید نامهای منحصر به فردی داشته باشند که برای این پروژه های بزرگ تقریبا غیرممکن است.
فقدان سازمان کد: وقتی همه گونه ها در یک زمینه “جهانی” قرار دارند ، گروهی با هم در ارتباط با هم دشوار می شود. دانستن ساختار پروژه ، یافتن کلاسهای عملکرد خاص و مدیریت کد به طور فزاینده ای دشوار می شود. پایه کد “مسطح” و هرج و مرج می شود.
قابلیت مدیریت و مشکل نگهداری: درگیری اسمی و عدم وجود سازمان ، حفظ کد ، اضافه کردن ویژگی های جدید یا سازماندهی مجدد کد موجود.
در این مرحله ، مناطق نام (نام های نام) بازی می شوند. درست همانطور که ما پرونده ها را در پوشه های معنی دار در رایانه خود سازماندهی می کنیم ، زمینه های نام به ما این امکان را می دهند تا کد خود را به گروه های سلسله مراتبی منطقی تقسیم کنیم.
اهداف مناطق نام:
سازمان: جمع آوری انواع مرتبط (کلاس ها ، ساختارها ، رابط ها ، عناصر ، نمایندگان) تحت گروه های منطقی. به عنوان مثال ، تمام کلاسهای مرتبط با رابط کاربری می توانند قسمت MyProject.ui ، کلاس های دسترسی به داده ها می توانند myProject.DataAccess در منطقه نام باشند.
جلوگیری از درگیری های نام: برای ارائه گونه های کاملاً واجد شرایط (namespeaceadi.sinifadi) برای متمایز کردن گونه های مختلف با همین نام. MyProject.Logging.Logger و سوم partylib.logging.logger به عنوان گونه های مختلف در نظر گرفته می شوند.
کنترل دسترسی (غیرمستقیم): هنگامی که با تعیین کننده دسترسی داخلی استفاده می شود ، یک گونه فقط تضمین می کند که از همان زمینه نام یا مناطق مختلف نام در تدوین خود (مونتاژ) در دسترس است (اما مناطق نام مکانیسم کنترل دسترسی مستقیم نیستند ، تعیین کننده ها این کار را انجام می دهند).
تعیین دامنه کد: روشن می کند که کدام یک از گونه های منطقی یک گونه متعلق به آن است.
فصل 1: کلمه کلیدی فضای نام)
در C#، یک کلمه کلیدی فضای نام برای توصیف یک قسمت نام استفاده می شود ، سپس یک نام به قسمت نام داده می شود و گونه هایی که متعلق به این قسمت نام است ، در براکت های فرفری قرار دارند.
نحو:
فضای نام isimalaniadi
{
// کلاس ها ، ساختارها ، رابط ها ، عناصر ، نمایندگان
کلاس اتخاذ
{
// …
}
ساختار benimyapim
{
// …
}
رابط Ibenimarayuzum
{
// …
}
// … گونه های دیگر
}
فضای نام: کلمه کلیدی که تعریف قسمت نام را آغاز می کند.
iSimalaniadi: نامی که به قسمت نام داده می شود. معمولاً یک ساختار سلسله مراتبی حاوی نام شرکت ، نام پروژه و سپس ماژول یا نام لایه استفاده می شود و توسط نقاط تقسیم می شود (به عنوان مثال Microsoft.EntityFrameWorkCore ، System.Collections.Geveric ، MyCompany.MyProject.BusinessLagic). قانون Pascalcase در نامگذاری استفاده می شود.
{…}: بلوکی که دامنه قسمت نام را تعیین می کند. همه گونه های این بلوک متعلق به آن میدان نام هستند.
مثال:
// پرونده: مدل ها/musteri.cs
فضای نام ecommerceapp.models
{
کلاس عمومی MUSTERI
{
int int id {get ؛ ست }
رشته عمومی adsoyad {get ؛ ست }
// … سایر ویژگی ها
}
}
// پرونده: models/urun.cs
namespace ecommerceapp.models // همین نام را می توان در پرونده های مختلف تعریف کرد
{
کلاس عمومی Urun
{
عمومی int urunid {دریافت کنید ؛ ست }
رشته عمومی Urunadi {get ؛ ست }
اعشاری عمومی fiyat {get ؛ ست }
}
}
// Dosya: Services/Siparisservice.cs
فضای نام ecommerceapp.service
{
// منطقه نام دیگر
با استفاده از ecommerceapp.models ؛ // ما بیان می کنیم که از منطقه نام مدل استفاده خواهیم کرد (با استفاده از دستورالعمل)
کلاس عمومی Siparisservice
{
سفارش باطل عمومی (مشتری مشتری ، محصولات لیست)
{
Console.Writeline ($ “{musteri.adsoyad for برای …”) ؛
foreach (محصول var در محصولات)
{
Console.Writeline ($ “- {urun.urunadi}”) ؛
}
// … منطق ایجاد نظم …
}
}
}
پرونده های نام جامع نام (نام های نامگذاری شده در پرونده های-C# 10+)
با C# 10 ، یک نحو کوتاهتر هنگامی رخ داد که همه گونه های موجود در یک پرونده متعلق به یک زمینه با نام واحد باشند. تعریف فضای نام در ابتدای پرونده نوشته شده و با یک کاما نقطه ای به پایان رسیده است. نیازی به براکت های مجعد نیست. این باعث کاهش رکود غیر ضروری می شود.
// dosya: models/adres.cs (C# 10+)
namespace ecommerceapp.models ؛ // فضای نام جامع را پرونده کنید
ADRE های کلاس عمومی
{
رشته عمومی Sokak {دریافت کنید ؛ ست }
رشته عمومی SEHIR {دریافت کنید ؛ ست }
}
// همه انواع دیگر این پرونده نیز در ecrommerceapp.models پذیرفته شده اند.
// کلاس postakodu {…}
نام های نامگذاری تو در تو)
مناطق نام را می توان برای ارائه سازمان های بیشتر در هم تنیده تعریف کرد.
فضای نام First.Projeeas
{
فضای نام کاخ کاربر // منطقه نام فکری
{
کلاس عمومی anapencere { /* … /}
}
فضای نام Verierisim // منطقه نام دیگر در هم تنیده
{
کلاس عمومی Veritabanibaglantisi { / … /}
}
}
// یا نقطه کوتاه تر (.) نماد:
فضای نام firmadi.projeadi.ismantigi
{
کلاس عمومی Hesaplamaservisi { / … */}
}
این ساختار اجازه می دهد تا گونه های گروه بندی به روشی دانه ای تر.
فصل 2: استفاده از مناطق نام (استفاده از دستورالعمل)
هنگامی که می خواهیم از گونه ای تعریف شده در قسمت نام دیگر (کلاس ، ساختار و غیره) استفاده کنیم ، می توانیم به جای نوشتن نام کامل (isimalani.altısimalani.sinifadi) ، دستورالعمل UNG را به کد اضافه کنیم.
2.1 استفاده از دستورالعمل:
هدف: این شامل یک قسمت نام خاص در محدوده پرونده موجود است. به این ترتیب ، ما فقط می توانیم از گونه های آن در قسمت نام خود با نام خود (بدون نام کامل) استفاده کنیم.
نحو: استفاده از isimalaniadi ؛
حل و فصل: معمولاً در بالای پرونده C# ، قبل از تعریف فضای نام (یا اگر از پرونده نام گسترده استفاده شده است).
مثال (مثال بالا را ادامه دهید):
// پرونده: program.cs
استفاده از سیستم ؛
با استفاده از system.collections.generic ؛ // برای استفاده از کلاس لیست
با استفاده از ecommerceapp.models ؛ // برای استفاده از کلاس های Custy و Product
با استفاده از ecommerceapp.service ؛ // برای استفاده از کلاس سفارش
فضای نام ecommerceapp.consoleui
{
برنامه کلاس
{
استاتیک اصلی اصلی (رشته[] args)
{
// به لطف دستورالعمل های استفاده ، نیازی به نوشتن نام کامل نیست:
مشتری MUSTERI1 = مشتری جدید {id = 1 ، adsoyad = “Ahmet Yilmaz”} ؛
محصول urun1 = محصول جدید {urunıd = 101 ، urunadi = “لپ تاپ” ، قیمت = 15000m} ؛
urun urun2 = urun جدید {urunid = 102 ، urunadi = “keybo” ، fiyat = 500m} ؛
لیست sepet = لیست جدید {Urun1 ، urun2} ؛
OrderVice OrderVisi = New OrderVice () ؛
OrderVisi.siparisolutitur (مشتری 1 ، سبد) ؛
// در صورت استفاده از ecommerceapp.models ؛ اگر نه:
// ecommerceapp.models.musteri musteri1 = جدید ecommerceapp.models.musteri {…} ؛
// باید به شکل نوشته شود.
}
}
}
2.2 استفاده از نام کامل واجد شرایط در صورت تصادف نام:
اگر نوعی نام را به همین نام از دو نام مختلف درج کرده اید (یا اگر نام آن را به عنوان متغیر با متغیر در نوعی از دامنه محلی داشته باشد) ، نمی داند از کدام نوع استفاده کنید و خطای عدم اطمینان را ارائه می دهد. در این حالت ، هنگام استفاده از همپوشانی ، باید نام واجد شرایط کامل (نام کاملاً واجد شرایط) بنویسید.
با استفاده از System.Timers ؛ // یک کلاس تایمر وجود دارد
با استفاده از System.Threading ؛ // یک کلاس تایمر وجود دارد
فضای نام Cakismanincozumu
{
تست کلاس
{
void calistir ()
{
// تایمر t ؛ // اشتباه! کدام تایمر؟ system.timers.timer ، system.threading.timer؟
// راه حل: از نام کامل استفاده کنید
System.Timers.Timer Timer1 = New System.Timers.Timer () ؛
System.Threading.Timer Timer2 = New System.Threading.Timer (پاسخ به تماس => {} ، NULL ، 0 ، 1000) ؛
Console.Writeline (“تایمرها ایجاد شده اند.”) ؛
}
}
}
فصل 3: استفاده های پیشرفته از دستورالعمل استفاده
3.1 نام مکان های منطقه را نام ببرید
نام مستعار (نام مستعار) را می توان با دستورالعمل استفاده برای کوتاه کردن مناطق اسمی طولانی یا در هم تنیده یا حل همزمان با ظرافت تر تعریف کرد.
نحو:
با استفاده از takmaad = tam.nitelikli.isim.alaniadi ؛
با استفاده از takmatipadi = tam.nitelikli.isim.alaniadi.tipadi ؛
مثال:
استفاده از سیستم ؛
با استفاده از timerThread = System.Threading.Timer ؛ // System.Threading.Timer Için Takma AD
با استفاده از رویدادهای تایمر = System.Timer.Timer ؛ // System.Timer.Timer.Timer Için Takma AD
با استفاده از برنامه های کاربردی = mycompany.myproject.common.utilition ؛ // نام مستعار برای فضای نام طولانی
فضای نام Takmaadkullanimi
{
تست کلاس
{
void calistir ()
{
timerThread T1 = TimerThread جدید (پاسخ به تماس => {} ، NULL ، 0 ، 1000) ؛
timeerevents t2 = timeere جدید (5000) ؛
string logmesaji = legilt.logformatter.format (“فرآیند آغاز شده است”) ؛
Console.Writeline (“ایجاد شده با ترسیم نام.”) ؛
}
}
// فرض کنید که گویی متعلق به فضای نام در پرونده دیگر است
namespace mycompany.myproject.common.utilitions
{
LogMatter کلاس استاتیک عمومی
{
فرمت رشته استاتیک عمومی (رشته msg) => $ “[{DateTime.Now:T}] {msg} “؛
}
}
}
نام های طرح می توانند به طور قابل توجهی خوانایی کد را افزایش دهند ، به خصوص در موارد همپوشانی یا با نام های بسیار طولانی.
3.2 استاتیک با استفاده از دستورالعمل (استاتیک با استفاده از – C# 6+)
این امکان را به شما می دهد تا بدون نوشتن نام کلاس ، به اعضای استاتیک (روش ها ، ویژگی ها ، زمینه ها) یک کلاس دسترسی پیدا کنید. این امر به ویژه برای کلاسهای کمکی استاتیک که اغلب مورد استفاده قرار می گیرد (ریاضی ، کنسول ، رشته ، Enumeble و غیره) مفید است.
نحو:
با استفاده از استاتیک System.Math ؛
با استفاده از استاتیک System.Console ؛
با استفاده از static system.linq.enumerble ؛ // برای روشهای LINQ
مثال:
استفاده از سیستم ؛
با استفاده از استاتیک System.Console ؛ // برای اعضای استاتیک کلاس کنسول
با استفاده از استاتیک System.Math ؛ // برای اعضای استاتیک کلاس ریاضی
با استفاده از system.collections.generic ؛
با استفاده از system.linq ؛
با استفاده از static system.linq.enumerble ؛ // برای روش هایی مانند دامنه
فضای نام استاتیکاسینایمی
{
برنامه کلاس
{
استاتیک اصلی اصلی (رشته[] args)
{
// console.writeline به جای نوشتن مستقیم
writeline (“استاتیک با استفاده از مثال!”) ؛
// مستقیم PI به جای Math.pi
ترجمه مضاعف = 2 * pi * 5 ؛
// گناه مستقیم به جای ریاضی.
Double Sinusdegeri = SIN (PI / 2) ؛
WritLine ($ “محیط: {ترجمه: F2}”) ؛
Writeline ($ “sin (pi/2): {sinusdegeri}”) ؛
لیست sayilar = لیست جدید 1 ، 2 ، 3 ، 4 ، 5} ؛
// system.linq.enumerable.where yerine doğrudan جایی (با استفاده از استاتیک ایل)
جفت کننده ها = اعداد وجود دارد.
// system.linq.enumerable.range محدوده مستقیم
var ilkonsayi = دامنه (1 ، 10) ؛
foreach (var sayi in ciftsayilar)
{
بنویسید (سیی + “”) ؛ // yerine writeline نوشتن
}
Writeline () ؛ // خط جدید
foreach (var sayi in ilkonsayi)
{
بنویسید (سیی + “”) ؛
}
Writeline () ؛
}
}
}
استاتیک با استفاده از استاتیک ممکن است کد را کوتاه کند ، اما استفاده بیش از حد می تواند با اطمینان از اینکه کدام روش از کدام کلاس می آید ، قابلیت خواندن را کاهش دهد. به طور کلی برای کلاسهای بسیار اساسی و مکرر مانند ریاضی ، کنسول ترجیح داده می شود.
3.3 جهانی با استفاده از بخشنامه (جهانی با استفاده از – C# 10+)
این ویژگی که همراه با C# 10 است ، تضمین می کند که یک دستورالعمل استفاده برای همه پرونده های پروژه معتبر است. این امر نیاز به نوشتن همان با استفاده از بیانیه ها را بارها و بارها در هر پرونده از بین می برد.
معمولاً در یک پرونده جداگانه در فهرست اصلی پروژه (به عنوان مثال GlobalUsings.cs) یا پرونده .csproj تعریف می شود.
کلمه کلیدی جهانی به سر استفاده اضافه می شود.
örön (GlobalUsings.cs):
// این دستورالعمل ها برای همه پرونده های C# در پروژه معتبر خواهد بود
جهانی با استفاده از سیستم ؛
جهانی با استفاده از system.collections.generic ؛
جهانی با استفاده از system.linq ؛
جهانی با استفاده از system.threading.tasks ؛
جهانی با استفاده از ecommerceapp.models ؛ // ما همچنین می توانیم مناطق نام خودمان را جهانی کنیم
جهانی با استفاده از استاتیک System.Console ؛ // Global Statik با استفاده از De Mümkün
این ویژگی تکرار کد را برای مناطق نام مانند system ، system.collections.genic ، system.linq ، که در هر پرونده به عنوان استاندارد استفاده می شود ، کاهش می دهد و باعث می شود پرونده ها پاک تر شوند.
فصل 4: مناطق و شرکت ها (مجامع)
گردآوری (مونتاژ): این واحد توزیع کد کامپایل شده (معمولاً یک .dll یا .exe) است که در .NET گردآوری می شود. ممکن است شامل یک یا چند منطقه اسم باشد.
تعیین کننده های اطلاعات داخلی: انواع یا اعضای مشخص شده در داخل می توانند با همان تدوین با کد قابل دسترسی باشند. از مناطق نام می توان برای پنهان کردن جزئیات برنامه داخلی یک مجموعه با داخلی از جهان خارج استفاده کرد. با تدوین متفاوت (پروژه های مختلف) که به ژانر داخلی قابل دسترسی نیست.
فصل 5: بهترین شیوه ها و قوانین نامگذاری
نامگذاری سلسله مراتبی و معنی دار: مناطق نام خود را با یک سلسله مراتب منطقی (معمولاً شرکت. projeadi.katmanadi یا شرکت) و نام های توضیحی ایجاد کنید. این امر درک ساختار پروژه را آسان تر می کند.
بازتاب ساختار پوشه: معمولاً توصیه می شود ساختار زمینه نام ساختار پوشه را در پروژه شما منعکس کند. به عنوان مثال ، کلاس های موجود در نام ecommerceapp.models در پوشه مدل پروژه یافت می شود. این کار حرکت در کد را آسان تر می کند. IDES ، مانند Visual Studio ، معمولاً این ساختار را بطور خودکار تشکیل می دهد.
استفاده از دستورالعمل ها در ابتدا: دستورالعمل های استفاده را در ابتدای پرونده C# قرار دهید. این اجازه می دهد تا در یک نگاه ، اعتیاد به خارجی پرونده داشته باشد.
اجتناب از استفاده از استفاده های غیر ضروری: دستورالعمل های Unshing Unship را تمیز کنید. IDE ها معمولاً ابزارهای اتوماتیک را برای این کار ارائه می دهند.
استفاده از نامهای واجد شرایط کامل فقط در صورت لزوم: دستورالعمل های UNG را انتخاب کنید مگر اینکه درگیری نام وجود داشته باشد. نام های واجد شرایط کامل می توانند کد را طولانی تر و غیرقابل توصیف تر کنند.
استفاده دقیق از نام های مستعار: ترسیم نام برای حل درگیری ها یا کوتاه کردن نام های بسیار طولانی مفید است ، اما استفاده از نام مستعار بیش از حد یا بی معنی می تواند کد را گیج کننده کند.
با استفاده از استاتیک با استفاده از متوسط: فقط برای کلاسهای استاتیک (کنسول ، ریاضی) که اغلب مورد استفاده قرار می گیرد و منبع آن استفاده کنید. استفاده بیش از حد می تواند خوانایی را کاهش دهد.
استفاده جهانی: استفاده جهانی برای مناطق نام استاندارد مورد استفاده در طول پروژه بسیار عالی است ، اما ایجاد یک نام نام بیش از حد خاص یا بیش از حد خاص ، ممکن است خطر همپوشانی نام را افزایش دهد و درک این مسئله را دشوار کند. معمولاً برای مناطق اساسی. نت و مناطق اصلی اسم خود پروژه استفاده می شود.
قسمت 6: نتیجه – کد GPS
فضای نام اساس سازمان کد را در اکوسیستم C# و .NET تشکیل می دهد. بدون آنها ، تهیه نرم افزار بزرگ در مقیاس تقریبا غیرممکن می شد. آنها با جلوگیری از درگیری های نام ، گروه بندی کد به صورت منطقی و روشن کردن ساختار پروژه ، مزایای بسیار خوبی را برای توسعه دهندگان فراهم می کنند.
فضای نام توسط کلمه کلیدی تعریف شده است ، ساختارهای سلسله مراتبی می توانند ایجاد شوند و مناطق جامع نام که با C# 10 همراه هستند ، نحو را ساده می کند. دستورالعمل استفاده به ما امکان می دهد به راحتی به نام های دیگر به گونه ها دسترسی پیدا کنیم. به منظور حل نام درگیری ها یا افزایش خوانایی ، نام های واجد شرایط کامل ، اتصالات (با استفاده از نام مستعار = …) و استاتیک استفاده (استفاده از استاتیک …) ارائه شده است. C# 10's Global با استفاده از دستورالعمل ها با استفاده از تکرارها در طول پروژه ، استاندارد را کاهش می دهد.
یک ساختار اسم طراحی شده به طور مستقیم بر قابلیت درک ، قابلیت مدیریت و سهولت مراقبت از پروژه تأثیر می گذارد. درست مانند یک سیستم فایل سازماندهی چاه ، مناطق اسمی خوب سازمان یافته به عنوان GPS عمل می کنند که به ما امکان می دهد راه خود را در اقیانوس کد پیدا کنیم. بنابراین ، استفاده از مناطق نام به روشی صحیح و مداوم هنگام توسعه با C# یک نیاز اساسی برای توسعه نرم افزار حرفه ای است.
عبدالکادیر گنگور – وب سایت شخصی
عبدالکادیر گنگور – وب سایت شخصی
عبدالکادیر گنگور – cv.
لوب
لوب
وابسته به لینکدین