ویژگی های کمتر استفاده شده در NET. - بخش ششم
#Execute VB code via C می توان از طریق #C، ماکروهای Visual Basic مورد استفاده‌ی در Office را تولید کرد. static void AddChartButton( Workbook workBook, Worksheet xlWorkSheetNew, Range currentRange, int macroId, int startRow, int endRow, int startCol, int endCol, string butt ...
ویژگی های کمتر استفاده شده در NET. - بخش پنجم
Nullable<T>.GetValueOrDefault Method با استفاده از متد GetValueOrDefault مقدار فعلی یک شیء Nullable و یا مقدار پیش فرض آن را می‌توان بدست آورد. این متد از عملگر ?? سریع‌تر است. float? yourSingle = -1.0f; Console.WriteLine( yourSingle.GetValueOrDefault() ); yourSingle = null; Console.WriteLine( yourSingle.GetValueOrDefault() ); // assign different default value Console.WriteLine( yourSingle.GetValueOrDefault ...
ویژگی های کمتر استفاده شده در NET. - بخش چهارم
Parallel.For & Parallel.ForEach Parallel.For – اجرای یک حلقه for که در آن عملیات تکرار ممکن است به صورت موازی انجام شود. var nums = Enumerable.Range( 0, 1000000 ).ToArray(); long total = 0; // Use type parameter to make subtotal a long, not an int Parallel.For< long >( 0, nums.Length, () => 0, ( j, loop, subtotal ) => { ...
ویژگی های کمتر استفاده شده در NET. - بخش سوم
__arglist __reftype __makeref __refvalue کلمات کلیدی در حالیکه، ویرایشگر Visual Studio این کلمات را به صورت رنگی و جزء کلمات کلیدی نمایش می‌دهد، ولی به دلیل عدم وجود مستندات برای این کلمات کلیدی، برای استفاده از آنها باید مراقب باشید؛ چرا که ممکن است به اندازه کافی تست نشده باشند. شما می‌توانید با استفاده از کلمه کلیدی makeref__ یک TypeReference را از یک متغیر، ایجاد کنید. با استفاده از کلمه کلیدی reftype__ می‌توانید نوع ...
C# 7 - Local Functions
توابع محلی، امکان تعریف یک تابع را درون یک متد، فراهم می‌کنند. هدف آن‌ها تدارک توابعی کمکی است که به سایر قسمت‌های کلاس مرتبط نمی‌شوند. برای مثال اگر متدی نیاز به کار با یک private method دیگر را دارد و این متد خصوصی در جای دیگری استفاده نمی‌شود، می‌توان جهت بالابردن خوانایی برنامه و سهولت یافتن متد مرتبط، این متد خصوصی را تبدیل به یک تابع محلی، درون همان متد کرد. static void Main(string[] args) { int Add(int a, int b) { ...
ویژگی های کمتر استفاده شده در NET. - بخش دوم
Curry and Partial methods Curry – در ریاضیات و علوم کامپیوتر، currying روشی است برای ترجمه تابعی که آرگومان‌های متعددی می‌گیرد و به صورت ارزیابی دنباله‌ای‌است از توابع که هر کدام یک آرگومان دارند. برای پیاده سازی آن در #C، از extension methods استفاده می‌کنیم. public static class CurryMethodExtensions { public static Func< A, Func< B, Func< C, R > > > Curry< A, B, C, R >( this Func< A, ...
ویژگی های کمتر استفاده شده در NET. - بخش اول
ObsoleteAttribute ObsoleteAttribute بر روی تمامی عناصر یک برنامه بجز assemblies, modules، پارامترها و مقادیر بازگشتی قابل استفاده است. علامتگذاری یک عنصر به عنوان منسوخ شده، به کاربر استفاده کننده اطلاع می‌دهد که این عنصر در نسخه‌های آینده حذف خواهد شد. با استفاده از پروپرتی Message آن پیامی را به کاربر استفاده کننده نشان خواهد داد و توصیه می‌شود در این پیام یک راه حل نیز ارائه شود. پروپرتی IsError در صورتی که مقدار آن به true ...
C# 7 - Throw Expressions
در طراحی زبان #C، واژه‌ی کلیدی throw همیشه یک statement بوده‌است و نه یک expression. برای مثال از آن نمی‌توان در قطعه کدهای شرطی و عبارات lambda استفاده کرد. برای رفع این محدودیت، در C# 7 کار معرفی «throw expressions» صورت گرفته‌است. throw expressions در C# 7 روش تعریف throw expressions همانند روش متداول تعریف آن‌ها است و از این لحاظ تغییری صورت نگرفته‌است. تنها تغییر انجام شده، امکان استفاده‌ی از آن در مح ...
C# 7 - Binary literals and digit separators
binary literals و digit separators دو ویژگی جدید در سی‌شارپ 7 هستند که باعث افزایش خوانایی کدها خواهند شد. Binary Literals از همان نسخه‌های اولیه سی‌شارپ قابلیت تعریف مقادیر عددی در مبنای 10 و 16 موجود بوده و تا قبل از سی‌شارپ 7 روش رایج برای تعریف مقادیر هگزادسیمال استفاده از enum بوده است: [Flags] public enum Option { None = 0x00, Option1 = 0x01, Option2 = 0x02, Option3 = 0x04, Option4 = 0x08, Opt ...
C# 7 - Generalized Async Return Types
از زمان ارائه‌ی C# 5 و معرفی الگوهای async/await ، تنها نوع‌های خروجی پشتیبانی شده، <Task، Task<T و void (در موارد خاص) بودند. مشکل همراه با این روش، اجبار به وهله سازی رسمی یک Task است؛ حتی اگر نوع خروجی کاملا مشخص باشد. برای نمونه در متد ذیل، میزان حجم مصرفی در یک پوشه بازگشت داده می‌شود: public async Task<long> GetDirectorySize(string path, string searchPattern) { if (!Directory.EnumerateFileSystemEntri ...