#CSharp
#CSharp8
🌐🌐🌐 ویژگی های جدید C# 8.0 (قسمت اول)
سی شارپ 8.0 نسخه اصلی C# میباشد . حتی با وجود اینکه تازه C# 7.0 7.1 7.2 7.3 منتشر شده و و هنوز از قابلیت های جدید آن هیجان زده هستیم.
برنامه فعلی بدین صورت میباشد که همزمان با Net Core 3.0 سی شارپ 8 نیز عرضه خواهد شد. با این حال ویژگی های این نسخه جدید در نسخه پیش نمایش ویژوال استودیو 2019 در حال انجام است و میتوانید انهارو بصورت جدی شروع کنید .
هدف از این پست این است که به شما یک دید کلی از آنچه انتظار می رود را ارائه دهیم و سرانجام در مورد آن چه انتظار داریم
در اینجا یک مرور کلی از ویژگی های مهم برای C # 8.0 ارائه شده است میپردازیم :
✅ Nullable reference types
شما را از مقدار دهی null به reference Type ها منع میکند که البته با warning ها به شما این اخطار را میدهد که باید nullable کنید متغیر مذکور را.
ویژگی های Async/await از سی شارپ نسخه 5.0 اضافه شد و به شما اجازه میدهد results را بصورت Asynchronous در کد استفاده کنید بدون callback
#CSharp8
🌐🌐🌐 ویژگی های جدید C# 8.0 (قسمت اول)
سی شارپ 8.0 نسخه اصلی C# میباشد . حتی با وجود اینکه تازه C# 7.0 7.1 7.2 7.3 منتشر شده و و هنوز از قابلیت های جدید آن هیجان زده هستیم.
برنامه فعلی بدین صورت میباشد که همزمان با Net Core 3.0 سی شارپ 8 نیز عرضه خواهد شد. با این حال ویژگی های این نسخه جدید در نسخه پیش نمایش ویژوال استودیو 2019 در حال انجام است و میتوانید انهارو بصورت جدی شروع کنید .
هدف از این پست این است که به شما یک دید کلی از آنچه انتظار می رود را ارائه دهیم و سرانجام در مورد آن چه انتظار داریم
در اینجا یک مرور کلی از ویژگی های مهم برای C # 8.0 ارائه شده است میپردازیم :
✅ Nullable reference types
شما را از مقدار دهی null به reference Type ها منع میکند که البته با warning ها به شما این اخطار را میدهد که باید nullable کنید متغیر مذکور را.
string s = null; // Warning: Assignment of null to non-nullable reference typeبرای این کار شما باید از Nullable reference type استفاده کنید
string? s = null; // Okبنابراین زمانی که از nullable reference type استفاده میکنید باید چک کنید که null نباشد :
void M(string? s)✅ Async streams
{
Console.WriteLine(s.Length); // Warning: Possible null reference exception
if (s != null)
{
Console.WriteLine(s.Length); // Ok: You won't get here if s is null
}
}
ویژگی های Async/await از سی شارپ نسخه 5.0 اضافه شد و به شما اجازه میدهد results را بصورت Asynchronous در کد استفاده کنید بدون callback
async Task<int> GetBigResultAsync()البته زمانی که میخواهیم داده هایی را بگیریم (یا تولید کنیم) که یک جریان مداوم هستند (continuous stream results) مثل زمانی که شما میخوای از دستگاه IoT دیتا بگیرید و یا از Cloud Service ، Async Stream ها برای این دیتا ها استفاده میشوند که اینترفیس جنریکی معرفی شده بنام <IAsyncEnumerable<T که در واقع async شده ی <IEnumerable<Tمی باشد و دقیقا اون چیزی است که شما نیاز دارید و زبان به شما اجازه میدهد که await رو روی foreach داشته باشید و داده هارا رو yield برگردانید و یا استفاده کنید
{
var result = await GetResultAsync();
if (result > 20) return result;
else return -1;
}
async IAsyncEnumerable<int> GetBigResultsAsync()@ABlueDeveloper
{
await foreach (var result in GetResultsAsync())
{
if (result > 20) yield return result;
}
}
#CSharp
#CSharp8
🌐🌐🌐 ویژگی های جدید C# 8.0 (قسمت دوم)
لینک قسمت اول : https://t.me/ABlueDeveloper/278
✅ Ranges and indices
اضافه شدن نوع Index برای زمانی که نیاز به ایندکس گذاری دارید ، شما میتونید از این نوع تایپ استفاده کنید و بصورت Int مقدار دهی کنید و یا قبل مقدار int از ^ استفاده کنید برای گرفتن مقدار ایندکس از اخر (prefix) . در واقع از این به بعد هرجا نیاز دارین که از کالکشنی با index ، value آن ایتم را بگیرید ، ویرایش یا پر کنید از index باید استفاده کنید.
در حال حاضر هنگامی که یک Interface را نوشتید و استفاده میکنید ،دیگر نمی توانید Member به آن را اضافه کنید بدون اینکه کلاسهایی که استفاده کردند تغییری ندهند.
در C # 8.0 به شما اجازه داده میشود در واقع یه Member رو Overload کنید . حالا دیگر تمام کلاس هایی که این interface را impelement کردند نیازی نیست حتما definition اون member رو بنویسند و از همون default impelementation که قبلا بود استفاده میکنند . به مثال زیر توجه کنید :
حالا شما میتوانید Members های جدید رو به interface هاتون با خیال راحت با default implementation اضافه کنید بدون اینکه نیاز باشه تو هر جایی که از این interface استفاده کردید تغییری ایجاد کنید.
@ABlueDeveloper
#CSharp8
🌐🌐🌐 ویژگی های جدید C# 8.0 (قسمت دوم)
لینک قسمت اول : https://t.me/ABlueDeveloper/278
✅ Ranges and indices
اضافه شدن نوع Index برای زمانی که نیاز به ایندکس گذاری دارید ، شما میتونید از این نوع تایپ استفاده کنید و بصورت Int مقدار دهی کنید و یا قبل مقدار int از ^ استفاده کنید برای گرفتن مقدار ایندکس از اخر (prefix) . در واقع از این به بعد هرجا نیاز دارین که از کالکشنی با index ، value آن ایتم را بگیرید ، ویرایش یا پر کنید از index باید استفاده کنید.
Index i1 = 3; // number 3 from beginningهمچنین یک نوع محدوده معرفی شده که شامل دو Index است، یکی برای شروع و یک برای پایان، و می تواند با یک عبارت x..y نوشته شود.با توجه به مثال قبل به مثال زیر توجه کنید:
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"
var slice = a[i1..i2]; // { 3, 4, 5 }✅ Default implementations of interface members
در حال حاضر هنگامی که یک Interface را نوشتید و استفاده میکنید ،دیگر نمی توانید Member به آن را اضافه کنید بدون اینکه کلاسهایی که استفاده کردند تغییری ندهند.
در C # 8.0 به شما اجازه داده میشود در واقع یه Member رو Overload کنید . حالا دیگر تمام کلاس هایی که این interface را impelement کردند نیازی نیست حتما definition اون member رو بنویسند و از همون default impelementation که قبلا بود استفاده میکنند . به مثال زیر توجه کنید :
interface ILoggerکلاس ConsoleLogger نیازی به پیاده سازی Log (Exception) از ILogger نیست، زیرا متد با اجرای پیش فرض اعلام شده است.
{
void Log(LogLevel level, string message);
void Log(Exception ex) => Log(LogLevel.Error, ex.ToString()); // New overload
}
class ConsoleLogger : ILogger
{
public void Log(LogLevel level, string message) { ... }
// Log(Exception) gets default implementation
}
حالا شما میتوانید Members های جدید رو به interface هاتون با خیال راحت با default implementation اضافه کنید بدون اینکه نیاز باشه تو هر جایی که از این interface استفاده کردید تغییری ایجاد کنید.
@ABlueDeveloper