C# Programming Guide
193 subscribers
113 photos
9 videos
14 files
102 links
سلام دوستان در این کانال نکاتی در مورد مسائل پیشرفته در سی شارپ ارائه میشه که مربوط به بیش از 15 سال تجربه ی کاری من هست.
ممنون از اینکه دنبال میکنید.
اگر نکات خاصی به ذهنتون رسید با ادمین در میون بذارید
تماس با ادمین:
@Ali_Visual_Studio
Download Telegram
C# Programming Guide
Photo
سلام، دوستان اگر مشهد هستید و دوست دارید سی شارپ یاد بگیرید من قراره آموزش سی شارپ رو از صفر + WPF توی آموزشگاه شرکت خودمون آموزش بدم و مدرسش هم خودم هستم، اگر مشتاق یادگیری در این زمینه هستید به سایت https://edu.atitec.ir مراجعه و ثبت نام کنید، همچنین اگر در زمینه های دیگه ای میخواید آموزش ببینید همکاران من در خدمت شما هستند.
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{

}
C# Programming Guide
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { }
نوع FileShare به شما اجازه میده تا چندین کاربر همزمان بتونن از توی استریم read و write کنن، این امر برای دانلود فایل ها سمت سرور انجام میشه برای همین قابلیت هایی از جمله چند اتصال همزمان و چند کلاینت همزمان رو بوجود میاره و اجازه میده تا هزاران کاربر همزمان بتونن از یک فایل استریم اطلاعات دریافت کنن، باید مراقب بخش Write باشید چون این قابلیت اجازه میده تا چند کلاینت همزمان بتونن توی فایل اطلاعات write کنن.
کد زیر در Linq اولین آیتم از یک لیست رو برای شما بر میگردونه که باید حواستون باشه اگر لیست خالی باشه با خطا مواجه میشید:


try
{
List<string> list = new List<string>();
var first = list.First();
}
catch (Exception ex)
{

}


برای رفع این مشکل دو راه وجود داره، اول اینکه یک مقدار پیشفرض برای وجود نداشتن آیتم در لیست هاتون بذارید:


var first = list.DefaultIfEmpty(null).First();

الان در صورتی که آیتمی توی لیست نباشه مقدار null بر میگردونه و به exception نمیخوره. یا اینکه از متد FirstOrDefault استفاده کنید:


var first = list.FirstOrDefault();


اینجا اگر از DefaultIfEmpty استفاده نکرده باشید به طور پیشفرض اگر ایتمی در لیست نباشه null برمیگردونه، Linq بسیار مهم و پرکاربرده و من خودم علاوه بر لیست های توی حافظه حتی در عملیات دیتابیسی هم بسیار ازش استفاده میکنم.

مثلا اگر شما از تابع Max استفاده کنید برای اینکه بزرگترین رو پیدا کنید اگر آیتمی توی لیست نباشه بازم به خطا میخورید که آیتمی توی لیست نبود که بزرگترینش رو بهتون بر گردونه برای همین مجدد DefaultIfEmpty قبل از صدا زدن Max میتونه بهتون کمک کنه تا یک مقدار پیشفرض درصورت خالی بودن لیست بهتون برگردونه. علت این امر اینه که لزوماً struct ها در سی شارپ nullable نیستند و حتما باید یک مقدار پیشفرض داشته باشند.
کاربرد DefaultIfEmpty معمولا وقتی هست که شما از where ها و شرط ها قبل از max گرفتن یا آیتم گرفتن استفاده کنید.
C# Programming Guide
کد زیر در Linq اولین آیتم از یک لیست رو برای شما بر میگردونه که باید حواستون باشه اگر لیست خالی باشه با خطا مواجه میشید: try { List<string> list = new List<string>(); var first = list.First(); …
نکته:
اکثر توابع Linq به طور پیشفرض where در خودشون دارن و نیازی نیست لزوما از Where استفاده کنید.
مثلا اگر میخواهید تعداد آیتم هایی که اسمشون ali هست رو بگیرید.
بجای اینکه بنویسید:


var first = list.Where(x => x.Name == "ali").Count();


میتونید مستقیم بنویسید:


var first = list.Count(x => x.Name == "ali");


برای FirstOrDefault و ... هم همینطور...
آیا موافق هستید که مسائل مبتدی از سی شارپ رو هم در کانال قرار بدم؟
anonymous poll

بلی – 19
👍👍👍👍👍👍👍 79%

خیر – 5
👍👍 21%

👥 24 people voted so far.
ربات آپلود منیجر آگرین آماده خدمات رسانی به کاربران دانلود منیجر آگرین می باشد. برای ثبت نام و استفاده در ربات @AgrinDM_bot عضو شوید.1 گیگابایت حجم رایگان برای کاربرانی که ثبت نام میکنند در نظر گرفتیم.کافیست لینک های خود را در ربات فروارد کنید تا لینک مستقیم برای شما ساخته شود.

پ.ن: این ربات و خود دانلود منیجر آگرین رو خودم نوشتم با سی شارپ نسخه اندرویدش هم با Xamarin Forms نوشته شده که نسخه ی آزمایشی رو میتونید از کانال @AgrinDM دانلود و نصب کنید.
هنگام آدرس دهی فایل ها و پوشه ها هیچوقت از کاراکتر های / یا \ به طور مستقیم استفاده نکنید.


var path = "d:\\test\\file.rar";


برنامه نویسانی Cross Platform همیشه مراقب کد های خود برای تمامی سیستم عامل ها و انعطاف پذیری کد ها هستند بنابراین دقت لازم رو داشته باشید که در سیستم عامل لینوکس و اندروید به جای \ از کاراکتر / برای آدرس دهی مسیر ها استفاده میشه مثلا: /storage/system بنابراین همیشه سعی کنید از کلاس و تابع Path.Combine برای اتصال دو مسیر یا پوشه به هم استفاده کنید.

مثلا:


var path1 = "storage";
var path2 = "system";
var path3 = "file.rar";
var address = System.IO.Path.Combine(path1, path2, path3);


خروجی در ویندوز برابر با آدرس زیر خواهد بود:
storage\system\file.rar

خروجی در اندروید:
storage/system/file.rar

بنابراین کد شما در همه ی سیستم عامل ها کار خواهد کرد و نیاز به تغییر جزئیات نخواهید داشت.
C# Programming Guide
Photo
پروژه ی Uno یکی دیگه از بزرگترین پروژه های گرفتن خروجی از سی شارپ و Xaml برای سیستم عامل های اندروید + IOS + UWP و صفحات html هست، یعنی شما میتونید با کد سی شارپ و xaml یک وبسایت با خروجی html و css و javascript بسازید.پروژشو تست کردم واقعا عالی و کاربردیه.
بیشتر قسمت خروجی سابت گرفتنش نظرم رو جلب کرده https://platform.uno/

یه تست کامل خروجی xaml به جاوا اسکریپت و وب به صورت کاملا Runtime و آنلاین:

https://platform.uno/Playground/index.html
با یادگیری برنامه نویسی Microsoft.SDK شما قادر خواهید بود با یک پروژه برای چندین نوع دات نت فرمورک پروژتونو خروجی بگیرید، مثلا یک کامپوننت بسازید هم برای نت 3.5 و هم برای نت 4.5 همزمان خروجی بگیرید
C# Programming Guide
Photo
زبان نشانه گذاری XAML یک زبان نشانه گذاری در رده های HTML و XML و TEX می باشد که توسط مایکروسافت توسعه و عرضه شده، این زبان امروزه در تولید اپلیکیشن های موبایل و نرم افزار های دسکتاپ و پیاده سازی صفحات وب کاربرد دارد، یکی از زبان های قدرمتند برنامه نویسی که از XAML در ساختار خود استفاده میکند WPF می باشد.
چرا ما باید به سراغ WPF برویم؟
ما باید در نظر داشته باشیم که امروزه نیاز های بازار برنامه نویسی در چه اپلیکیشن ها و سیستم عامل ها و زبان های برنامه نویسی می باشد، برای مثال، آیا بازار به سمت موبایل پیش میرود؟ یا صفحات وب؟ یا اپلیکیشن های دسکتاپ یا بازی سازی؟ اگر ما زبانی را انتخاب کنیم که در آینده بر اساس تغییر نیاز های بازار کمکی به ما نمی کند چقدر وقتمان گرفته میشود تا زبان جدیدی را یاد بگیریم و شروع به کار کنیم؟
زبان XAML یک زبان نشانه گذاری بسیار قدرتمند و مرتب می باشد که با IDE قدرتمند Visual Studio محبوبیت و قدرت آن چندین برابر می شود.شما با XAML و زبان سی شارپ میتوانید برای تمامی سیستم عامل ها و در تمامی ابعاد و پلتفرم ها بدون محدودیت برنامه نویسی کنید، نرم افزار بسازید، بازی بسازید، وبسایت بسازید، یعنی هم نگران آینده ی زبانی که انتخاب کردید نیستید و هم با یک تیر چندین نشان زده اید.
برخی پروکسی ها یا همشون روی پورت های معروف مثل 80 و 443 کار میکنن بنابراین اگر شما سروری داشته باشید که روی پورت مثلا 1562 بالا میاد، سرور شما با VPN ها کار نمی کنه و بالا نمیاد.این مشکل مربوط به سرور شما نمیشه مربوط به VPN ها میشه که این قضیه رو ساپورت نمی کنن.
یکی از قابلیت های جالبی که Task.Run داره اینه که لزوما در سیستم async await ها وقتی یک تابعی در Task اجرا میشه در یک ترد جدید اجرا نمیشه، سیستم نگاه میکنه ببینه که آیا تردی که در حال اجرا هست مشغول هست یا نه؟ اگر مشغول نیست ترد جدید نمیسازه، تابع شمارو توی همون ترد قبلی که ایجاد شده اجرا میکنه، اگر ترد مشغول باشه اجرای متد شما در ترد جدیدی اجرا خواهد شد، برای همین await کردن ترد رو مشغول نمی کنه و باعث نمیشه Task.Run یک ترد جدید بسازه، اینجاست که میشه راحت فرق دو تابع :
await Task.Delay(10000);
و
Thread.Sleep(10000);
رو فهمید در روش اول ترد شما مشغول نمی مونه بنابراین Task.Run ترد جدید نمیسازه و متد شما رو توی همون ترد قبلی اجرا میکنه در حالی که در روش دوم ترد شما مشغول میشه و Task.Run همیشه یک ترد جدید میسازه.
استفاده از task ها رو توی پروژه هاتون بسیار بسیار پیشنهاد میکنم ب جای اینکه خودتون به صورت دستی Thread بسازید.بهتره انجام اینکار رو به Task ها بسپاریم که در مواقع لزوم ترد بسازن.و سرعت و بازدهی نرم افزار رو بسیار بالا می بره
C# Programming Guide
Photo
آموزش ها از هفته ی بعدی شروع خواهند شد، مهلت ثبت نام تا جمعه هفته ی بعد
C# Programming Guide
ویدئوی معرفی سیگنالگو و قابلیت ها و مقایسه با SignalR و WCF
در پست بعدی آموزش سیگنالگو قسمت دوم رو براتون میذارم که توش یاد میگیریم چطوری یک سرور و کلاینت با سیگنالگو پیاده سازی کنیم
Signalgo2.wmv
69.4 MB
آموزش سیگنالگو قسمت دوم