Web Devs
644 subscribers
218 photos
22 videos
17 files
233 links
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers.
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs
Download Telegram
#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 کنید متغیر مذکور را.
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)
{
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 streams

ویژگی های Async/await از سی شارپ نسخه 5.0 اضافه شد و به شما اجازه میدهد results را بصورت Asynchronous در کد استفاده کنید بدون callback
async Task<int> GetBigResultAsync()
{
var result = await GetResultAsync();
if (result > 20) return result;
else return -1;
}
البته زمانی که میخواهیم داده هایی را بگیریم (یا تولید کنیم) که یک جریان مداوم هستند (continuous stream results) مثل زمانی که شما میخوای از دستگاه IoT دیتا بگیرید و یا از Cloud Service ، Async Stream ها برای این دیتا ها استفاده میشوند که اینترفیس جنریکی معرفی شده بنام <IAsyncEnumerable<T که در واقع async شده ی <IEnumerable<Tمی باشد و دقیقا اون چیزی است که شما نیاز دارید و زبان به شما اجازه میدهد که await رو روی foreach داشته باشید و داده هارا رو yield برگردانید و یا استفاده کنید

async IAsyncEnumerable<int> GetBigResultsAsync()
{
await foreach (var result in GetResultsAsync())
{
if (result > 20) yield return result;
}
}

@ABlueDeveloper
#CSharp
#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 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"

همچنین یک نوع محدوده معرفی شده که شامل دو Index است، یکی برای شروع و یک برای پایان، و می تواند با یک عبارت x..y نوشته شود.با توجه به مثال قبل به مثال زیر توجه کنید:
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
{
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
}

کلاس ConsoleLogger نیازی به پیاده سازی Log (Exception) از ILogger نیست، زیرا متد با اجرای پیش فرض اعلام شده است.

حالا شما میتوانید Members های جدید رو به interface هاتون با خیال راحت با default implementation اضافه کنید بدون اینکه نیاز باشه تو هر جایی که از این interface استفاده کردید تغییری ایجاد کنید.




@ABlueDeveloper
#FAQ
What is this ?

مجموعه ای کامل از سوالات مصاحبه ،‌ همراه با پاسخ و برخی از نکات کد که به شما کمک می کند تا برای مصاحبه های فنی آماده شوید . بسیاری از این سؤالات از مصاحبه های واقعی هستند و برای اکثرمفاهیم وب سوال وجود دارد

توجه داشته باشید که بسیاری از این سوالات باز هستند و می توانند منجر به بحث های جالبی شوند
مطالب مورد پوشش :‌
#JavaScript #React #VueJs #Angular #NodeJs #AngularJS #Bootstrap #CSS #HTML5 #Sass #Webpack #MongoDB #SQL #GraphQL #CSharp #Golang #Java #ASPNET #ASPNETMVC #NETFramework #Ruby #RubyOnRails #TypeScript #PHP #Android #RESTAPI #DataStructures #DesignPattern #Swift #Agile #Scrum



📌📌 لینک : https://goo.gl/KaMsmK
@fullStackDevs
#PersianDateTime
#CSharp
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی
🔹 پشتیبانی از سال کبیسه
🔸 شبیه سازی کامل ساختار DateTime
.NetFramework 4.5

نصب پکیج :

Install-Package ABluePersianDateTime -Version 1.0.3
dotnet add package ABluePersianDateTime --version 1.0.3
paket add ABluePersianDateTime --version 1.0.3

@fullStackDevs
Forwarded from Web Devs
#PersianDateTime
#CSharp
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی
🔹 پشتیبانی از سال کبیسه
🔸 شبیه سازی کامل ساختار DateTime
.NetFramework 4.5

نصب پکیج :

Install-Package ABluePersianDateTime -Version 1.0.3
dotnet add package ABluePersianDateTime --version 1.0.3
paket add ABluePersianDateTime --version 1.0.3

@fullStackDevs
#PersianDateTime
#CSharp
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری
🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی
🔹 پشتیبانی از سال کبیسه
🔸 شبیه سازی کامل ساختار DateTime
.NetFramework 4.5

نصب پکیج :

Install-Package ABluePersianDateTime -Version 1.0.5
dotnet add package ABluePersianDateTime --version 1.0.5
paket add ABluePersianDateTime --version 1.0.5

@fullStackDevs
Web Devs
#PersianDateTime #CSharp 🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری 🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی 🔹 پشتیبانی از سال کبیسه 🔸 شبیه سازی کامل ساختار DateTime .NetFramework 4.5 نصب…
#PersianDateTime
#CSharp
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری


✔️ اضافه کردن اپراتور منها برای بدست آوردن تفاضل دو تاریخ
مثال:
  PersianDateTime datetime1 = new PersianDateTime(_dateTime);
PersianDateTime datetime2 = new PersianDateTime(_dateTime.AddDays(-10));
var timeSpan = datetime1 - datetime2;

.NetFramework 4.5

🔳 در پست بعدی تو این هفته compatible با NetCore هم توی ناگت برای استفاده قرار داده میشود.

نصب پکیج :

Install-Package ABluePersianDateTime -Version 1.0.7
dotnet add package ABluePersianDateTime --version 1.0.7
paket add ABluePersianDateTime --version 1.0.7


@fullStackDevs
Web Devs
#PersianDateTime #CSharp 🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری 🔸 متدهای مختلف برای بدست آوردن رشته های مختلف تاریخ شمسی با فرمت های متفاوت و اعداد فارسی 🔹 پشتیبانی از سال کبیسه 🔸 شبیه سازی کامل ساختار DateTime .NetFramework 4.5 نصب…
#PersianDateTime
#CSharp
#NetStandard2.0
🔹 ساختار تاریخ شمسی با متد های تبدیل به تاریخ میلادی و یا هجری


.NetStandard 2.0

🔳 It is supported in .NET Core 2.0, in the .NET Framework 4.6.1 and later versions
نصب پکیج :

Install-Package ABluePersianDateTime -Version 2.0.2
dotnet add package ABluePersianDateTime --version 2.0.2
paket add ABluePersianDateTime --version 2.0.2


@fullStackDevs
#QUIZ

#CSharp The conditional logical operators can be overloaded ⁉️ 📢 @FullStackDevs
Anonymous Quiz
62%
true
38%
false
#Indexer
#Params
#cSharp

🔰Indexer & Params IN C#

🔸ایندکسر ها در سی شارپ این اجازه را به اشیاء کلاس ها و struct ها میدهند تا مانند آرایه ها index گذاری شوند .
🔹از کاربردهای مهمی که میتوان از indexer ها استفاده کرد. encapsulate کردن کالکشن و یا یک آرایه داخلی در درون یک شء میباشد.
🔰Prams
🔸در c# هنگامی که پارامتر یک متد تعداد نامشخصی آرگومان (از یک نوع تایپ) دارد از کلمه کلیدی params برای تعریف آن پارامتر استفاده میکنیم. کامپایلر با params مانند یک temporary array برخورد میکند و از آن برای دریافت پارامترهای پاس داده شده
توسط caller استفاده میکند.

❇️ در ادامه تکنیکی را معرفی میکنیم که به عنوان یک C# Developer خوب است بدانید.

🔹Indexers can use params

🔸همه ما روش معقول و معمول استفاده از ایندکسر ها را میدانیم و مثال های فراوانی که از کاربردهای آن ارائه شده قالبا و تمام به یک شکل میباشد
در این پست، کاربردی جالب و ترکیبی از ایندکسر و params را معرفی میکنیم که امیدواریم مفید واقع شود.
▪️تعریف یک ایندکسر :
public string this[string key] {
get { return internalDictionary[key]; }
}

🔹اما ایا میدانید می توانیم از params هم در هنگام تعریف ایندکسر استفاده کنیم ؟
و ایندکسر خود را بدین شکل بنویسیم

public IEnumerable<string> this[params string[] keys] {
get { return keys.Select(key => internalDictionary[key]).AsEnumerable(); }
}


🔸همچنین میتوانید در یک کلاس از هر دو شکل تعریف ایندکسر در کنار هم استفاده کنید و بسته به تعداد arg های پاس داده شده خروجی متفاوتی دریافت میکنید.

مشاهده نمونه سورس.(حتما بررسی کنید😉)

@fullStackDevs
#csharp
#Enums

❇️در این پست مورد جالبی را در مورد Enum ها برررسی میکنیم.

🔸آیا می دانستید که میتوانیم برای Enum ها Extension method بنویسیم؟
▫️پاسخ سوال واضح است. مشخصا بله .

🔹اما اگر بخواهیم فقط برای یک enum خاص یک Extension method بنویسیم و در سایر Enum ها قابل دسترس نباشد چه ⁉️

❇️ در این پست به بررسی این موضوع میپردازیم و در نهایت پاسخ سوال را ارائه می کنیم.

🔰همانطور که میدانید Extension متد ها راهی برای نوشتن و افزودن متدهای جدید به یک type از پیش ساخته شده، یا یک type سفارشی، بدون تغییر
در آن type است.
درواقع enum ها نوع خاصی از کلاس ها هستند که گروهی از constant ها را نمایش میدهند. پس دور از انتظار نیست که به این صورت برایشان Extention method بنویسیم.

enum Duration { Day, Week, Month };

static class DurationExtensions {

public static DateTime From(this Duration duration, DateTime dateTime) {
switch(duration) {
case Day: return dateTime.AddDays(1);
case Week: return dateTime.AddDays(7);
case Month: return dateTime.AddMonths(1);
default: throw new ArgumentOutOfRangeException("duration");
}
}
}

▪️و بدین صورت متد From فقط برای enum Duration قابل دسترسی خواهد بود.

@fullStackDevs
#csharp
#dotnet
#comparison

روش های بد مقایسه رشته ها در سی شارپ

تا به حال اکثرا از ToLowerیا ToUpper برای مقایسه رشته های غیر حساس به حروف بزرگ استفاده می کردیم .

اما این بهترین راه برای انجام آن نیست.

استفاده از string.Equals این مقایسه از سرعت عملکرد بهتری برخوردار است (در واقع به حروف کوچک یا بزرگ رشته ها علاقه ای نداریم).

همانطور که در تصویر می بینیم.

پس برای مقایسه دو رشته string بهتره از String.Equals استفاده کنیم

@fullStackDevs
👍111
IMG_0165.JPG
2.2 MB
#csharp #visualstudio #csharp10 #aspdotnet #aspcore #dotnet

6 Amazing feature and improvement in C# 10:

📌 File-scoped namespace
📌 Record structs
📌 Constant interpolated strings
📌 Extended property patterns
📌 Global using directive
📌 Assignment and declaration in same deconstruction

❗️C# 10 is supported on .NET 6 .

@fullStackDevs
👍5
#csharp

Enum Flags Attribute in C#

@fullStackDevs
👍72🔥2
#feature
#cSharp

یکی از ویژگی های که از C# 7.0 معرفی شد استفاده از خط زیر (underscore) ( _ ) به عنوان جداکننده رقم شناخته می شود. هدف این است که خوانایی بهتر و آسان‌تر را بخصوص در اعداد بزرگ فراهم کنیم.

📌 اطلاعات بیشتر
@fullStackDevs
9👍6
#Algorithm #Sliding_window
#SlidingWindow #CSharp



🧩 الگوریتم Sliding Window:

الگوریتم Sliding Window یکی از تکنیک‌های مهم برای حل مسائل آرایه‌ها و رشته‌ها به طور بهینه است. این روش با استفاده از دو نشانگر برای بررسی بخش‌های مختلف داده، به سرعت جواب رو پیدا می‌کنه.

🔑 چطور کار می‌کنه؟
- دو نشانگر (`left` و `right`) برای نمایش پنجره (قسمتی از داده) استفاده می‌کنیم.
- نشانگر راست حرکت می‌کنه و هر بار یک کاراکتر یا مقدار جدید بررسی می‌شه.
- وقتی که شرایط خاصی مثل وجود مقدار تکراری یا رسیدن به اندازه‌ای خاص محقق بشه، نشانگر چپ حرکت می‌کنه تا پنجره رو کوچکتر کنیم.

مزیت اصلی: زمان اجرا به O(n) کاهش می‌یابد که نسبت به روش‌های سنتی با O(n²) بسیار سریع‌تر است.

💡 مثال: طول بزرگ‌ترین زیررشته بدون کاراکتر تکراری
ورودی: "abcabcbb"
خروجی: 3 (زیربرنامه "abc" بزرگ‌ترین زیررشته بدون تکرار است)



using System;
using System.Collections.Generic;

class Solution {
public int LengthOfLongestSubstring(string s) {
HashSet<char> set = new HashSet<char>();
int left = 0, maxLength = 0;

for (int right = 0; right < s.Length; right++) {
while (set.Contains(s[right])) {
set.Remove(s[left]);
left++;
}
set.Add(s[right]);
maxLength = Math.Max(maxLength, right - left + 1);
}

return maxLength;
}
}


کاربردها:
- پیدا کردن طول بزرگترین زیررشته یا زیرآرایه
- جستجوی زیرمجموعه‌ها با ویژگی‌های خاص
- مسائل مربوط به جمع یا مقایسه زیرآرایه‌ها و زیررشته‌ها



این الگوریتم خیلی مفیده برای حل مسائل بهینه در آرایه‌ها و رشته‌ها، خصوصاً وقتی نیاز به
بررسی بخش‌های مختلف داریم!



@fullStackDevs
👍5