اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
در ادامهی طراحی مبتنی بر مینیمالیسم C# 10.0، پس از پیشفرض شدن «top level programs» و همچنین «کاهش تعداد بار تعاریف usingها»، تغییر سوم صورت گرفتهی در قالبهای پروژههای مبتنی بر دات نت 6، ساده سازی تعاریف فضاهای نام است. برای مثال یک کنترلر، به این صورت تعریف شدهاست:
که به آن «File-Scoped Namespaces» هم گفته میشود.
بررسی مفهوم «File-Scoped Namespaces»
یکی از اهداف مهم C# 10.0، کاهش نویز موجود در فایلهای cs. است. اگر قرار است صدها بار در فایلهای مختلف برنامه، using System نوشته شود، چرا یکبار آنرا به صورت عمومی تعریف نکنیم و یا اگر در 99 درصد موارد، توسعه دهندهها به ازای یک فایل، تنها یک فضای نام را تعریف میکنند، چرا باید یک فضای اضافی خالی، برای تعریف آن اختصاص داده شود و تمام فایلها به همراه یک «tab فاصلهی» اضافی مختص به این فضای نام باشند؟
تعریف فعلی فضاهای نام در #C به صورت زیر است:
در این حالت هر شیءای که داخل {} این فضای نام قرار گیرد، متعلق به آن است.
در C# 10.0، میتوان این تعریف را ساده کرد؛ از آنجائیکه به ندرت چند فضای نام در یک تک فایل تعریف میشوند، میتوان تعریف فضای نام را در یک سطر، در ابتدای فایل ذکر کرد، تا به صورت خودکار به کل فایل و اشیاء موجود در آن اعمال شود:
در این حالت، روش استفادهی از یک چنین اشیایی هیچ تغییری نخواهد کرد؛ فقط یک tab space و فاصله از کنار صفحه، صرفهجویی میشود!
محدویتهای «File-Scoped Namespaces»
- بدیهی است در این حالت دیگر نمیتوان چندین فضای نام را همانند قبل در یک فایل cs. تعریف کرد:
و البته این موردی است که جزو best practices توسعهی برنامههای #C به هیچ عنوان توصیه نمیشود.
- همچنین امکان ترکیب روش قبلی تعریف فضاهای نام، با روش جدید، در یک فایل وجود ندارد.
- به علاوه امکان تعریف فضاهای نام تو در تو که با روش قدیمی وجود دارد:
در این حالت جدید پشتیبانی نمیشود.
namespace mvc.Controllers; public class HomeController : Controller { }
بررسی مفهوم «File-Scoped Namespaces»
یکی از اهداف مهم C# 10.0، کاهش نویز موجود در فایلهای cs. است. اگر قرار است صدها بار در فایلهای مختلف برنامه، using System نوشته شود، چرا یکبار آنرا به صورت عمومی تعریف نکنیم و یا اگر در 99 درصد موارد، توسعه دهندهها به ازای یک فایل، تنها یک فضای نام را تعریف میکنند، چرا باید یک فضای اضافی خالی، برای تعریف آن اختصاص داده شود و تمام فایلها به همراه یک «tab فاصلهی» اضافی مختص به این فضای نام باشند؟
تعریف فعلی فضاهای نام در #C به صورت زیر است:
namespace MyNamespace { public class MyClass { public void MyMethod() { //...Method implementation } } }
در C# 10.0، میتوان این تعریف را ساده کرد؛ از آنجائیکه به ندرت چند فضای نام در یک تک فایل تعریف میشوند، میتوان تعریف فضای نام را در یک سطر، در ابتدای فایل ذکر کرد، تا به صورت خودکار به کل فایل و اشیاء موجود در آن اعمال شود:
namespace MyNamespace; public class MyClass { public void MyMethod() { //...Method implementation } }
محدویتهای «File-Scoped Namespaces»
- بدیهی است در این حالت دیگر نمیتوان چندین فضای نام را همانند قبل در یک فایل cs. تعریف کرد:
namespace Name1 { public class Class1 { } } namespace Name1.Name2 { public class Class2 { } }
- همچنین امکان ترکیب روش قبلی تعریف فضاهای نام، با روش جدید، در یک فایل وجود ندارد.
- به علاوه امکان تعریف فضاهای نام تو در تو که با روش قدیمی وجود دارد:
namespace Name1 { public class Class1 { } namespace Name1.Name2 { public class Class2 { } } }