کانال توسعه دهندگان سی شارپ
154 subscribers
32 photos
5 videos
6 files
87 links
اینجا از تجربیاتم توی برنامه نویسی می نویسم🙌
یک عدد دات نت کار
گیت هاب من:
https://github.com/hassanrafatjoo
Download Telegram
📺 چندتا از کاربردی ترین شورت‌کات های یوتیوب!

▪️اگه با کامپیوتر یا لپ‌تاپ وارد وب‌سایت یوتیوب می‌شید لازمه که این شورت‌کات هارو بلد باشید تا چندقدم از بقیه جلوتر باشید

• اگر F رو فشار بدی ویدیو تمام صفحه میشه
• اگر L بزنی ویدیو ده ثانیه می‌ره جلو
• اگر j بزنی ده ثانیه می‌ره عقب
• اگه k بزنی میتونی ویدیو رو نگه داری
• اگه shift + . بزنی ویدیو سریع تر میشه
• اگه shift + , بزنی ویدیو کند تر میشه
• اگه یهو خواستی میوت کنی میتونی m بزنی تا ویدیو بی صدا بشه
• اگر موقعی ویدیو رو نگه داشتی . رو بزنی میتونی فریم به فریم ویدیو رو ببینی

آکادمی تحصیلی زرج، پیشرو در مباحث آموزشی و پژوهشی


🏮🖇 @zrjacademi
برای این که توی برنامه نویسی رشد کنید حتی الامکان اگر در گروهی هم هستید سعی کنید فعالیت داشته باشید
و اِلا همون ترک کنین هم بهتره توی بعضی گروه های بحث های چرتی میشه که جز هدر دادن وقتتون هیچ چیزی نداره و به جای همون میتونین وقت بزارید دانش فنی خودتون رو افزایش بدید
اگر میخواید با تبلیغات آزار دهنده یوتیوب مواجه نشید
مرورگر brave رو نصب کنید راحت ترید

از اونجایی که بر اساس کرومیوم هستش تموم افزونه های گوگل کروم هم روش جواب میده

عاشقش شدم😂
سلام دوستان ادامه مبحث شی گرایی که راکد مونده بود رو میخوام مجددا شروع کنم
#شی_گرایی
کانال توسعه دهندگان سی شارپ
بیاید و در قسمت Solution Explorer روی اسم پروژه تون کلیک راست کنید و بعد برید به قسمت Add گزینه های متعددی بهتون نشون میده که رایج ترین اون ها قرار داده شده که Class هم یکی از اون ها هست اگر خواستید چیزای دیگه ای اضافه کنید روی New Itemکلیک کنید روی Class…
کاربرد متد در شی گرایی

فرض کنیم ما قراره چندین جا بیایم یه کد بنویسیم . اگر قرار باشه هر بار بیایم از دوباره بنویسیمش کدمون خیلی شلوغ میشه در چنین حالتی میتونیم یک بار یک متد بنویسیم و چندین جا ازش استفاده کنیم

فرض کنیم قراره با دیتابیس کار کنیم آیا باید هر بار بیایم یه کد بنویسیم که به دیتابیس وصل شیم یا مثلا از داخل دیتابیس یه داده ای رو حذفش کنیم؟

خب منطق این وسط حکم میکنه که نه ما نباید همچین کاری انجام بدیم و شی گرایی این کمک رو به ما میکنه که کدها تمیزتر و قابل خواندن تر(Readablity) باشن

#شی_گرایی
مثلا این کد قراره به یه دیتابیس وصل بشه و یک کاربر رو بر اساس شناسه یا همون آیدی حذفش کنه
توی این مثال ما از هیچ ORM استفاده نمیکنیم و با همون دستورات پیش فرض سی شارپ که ADO.NET قدیمی هست و برای ارتباط با دیتابیس استفاده میشه،اینجا ازش استفاده میکنیم


string connectionString = "Data Source=.;Initial Catalog=MyDB;Integrated Security=True";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("DELETE FROM Users WHERE Id = @id", connection);
cmd.Parameters.AddWithValue("@id", 5);

connection.Open();
cmd.ExecuteNonQuery();
connection.Close();


خب این دیگه خیلی شلوغه نه؟ به جز اون خط اول که رشته اتصال یا کانشکن استرینگ ما برای وصل شدن به دیتابیس هست کلی کار تکراری اضافه شده که اولا باید کوئری delete نوشته بشه و بعد آیدی کاربر رو پیدا کنه،اتصال رو باز کنه،دستور اجرا بشه و برای جلوگیری از هدر رفت منابع اتصال رو قطع کنه

#شی_گرایی
اما توی این کد پایین ما یک کلاس تعریف کردیم که با یه نگاه خیلی ساده می بینیم خیلی خیلی منطقی تر هست تا کدی که ما نوشته بودیم برای اتصال به دیتابیس،حذف کاربر و بعد بستن ارتباط با دیتابیس
public class DatabaseHelper
{
private string connectionString = "Data Source=.;Initial Catalog=MyDB;Integrated Security=True";

public void DeleteUserById(int userId)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("DELETE FROM Users WHERE Id = @id", connection);
cmd.Parameters.AddWithValue("@id", userId);
connection.Open();
cmd.ExecuteNonQuery();
}
}
}


توی این مثال یک کلاس به اسم DatabaseBHelper ساخته شده(هر اسمی قابل استفاده هست و کاملا دلخواه هست)

یک رشته اتصال تعریف کردیم که وصل میشیم به دیتابیس

یک متد به اسم DeleteUserByID تعریف کردیم که باعث میشه کاربر حذف بشه بر اساس آیدی.یک ورودی میگیره از نوع int که شناسه کاربر قاعدتا همیشه int یا عدد صحیح هست

در داخل بدنه اونجایی که از using استفاده شده برای اینه که نیازی به بستن ارتباط یا کانکشن به صورت عادی مثل connection.Close() نباشه و از using برای جلوگیری از هدر رفت منابع استفاده میکنیم که خودش خودکار ببنده

و در ادامه دستورات قبلی برای وصل شدن به دیتابیس،حذف کاربر،باز کردن اتصال و اجرای دستور رو می نویسیم


حالا اگر از این متد بخوایم جای دیگه ای هم استفاده کنیم خیلی کارمون راحت تره

فرض کنید قراره شما هم خودتون توی لیست کابران داخل سایتتون بتونید کاربر رو دستی حذفش کنید و هم این که خود کاربر بهش اجازه بدید با مسئولیت خودش حساب رو حذف کنه

در چنین حالتی نیاز ندارید که برای هر دو بخش یک متد جداگانه بنویسید بلکه از همین کلاس و متد میتونید استفاده کنید برای این کار

#شی_گرایی
👍1
🎯 آیا می‌دونی داشتن مقاله یکی از مهم‌ترین امتیازها در مصاحبه‌های دانشگاهی و استخدامیه؟
اگه هنوز مقاله ننوشتی یا نمی‌دونی چطور باید شروع کنی، این دوره دقیقاً برای تو طراحی شده 👇
📚 دوره جامع مقاله‌نویسی علمی
در قالب ۳ کارگاه تخصصی – هر کدام فقط در ۲ روز

📍 کارگاه اول: مقاله‌نویسی کنفرانسی (پایه و پیش‌نیاز دو کارگاه بعدی)
🟢 آموزش از صفر تا نگارش و ارسال مقاله به کنفرانس
📆 تاریخ برگزاری: ۸ و ۹ مرداد
💰 هزینه: ۱۹۹ هزار تومان
📍 کارگاه دوم: مقاله‌نویسی علمی پژوهشی داخلی
تاریخ برگزاری: ۱۵ و ۱۶ مرداد
💰 هزینه: ۲۹۹ هزار تومان

📍 کارگاه سوم: پاسخ به داوران و بازنویسی مقاله علمی
تاریخ برگزاری: ۲۹ و ۳۰ مرداد
💰 هزینه: ۲۹۹ هزار تومان

🎁 ثبت‌نام در هر سه کارگاه با تخفیف ویژه: فقط ۶۹۹ هزار تومان

مزایای دوره:
فایل قالب مقاله + معرفی کنفرانس‌ها و مجلات
مناسب رزومه مصاحبه ارشد، دکتری، فرهنگیان و رتبه بندی معلمان

👩‍🏫 مدرس دوره: زهرا رفعت‌جو – مدرس و پژوهشگر و دکتری دانشگاه شیراز

♦️شیوه برگزاری: آنلاین در اسکای روم

📥 ثبت‌نام در واتسپ:

https://wa.me/989017028743
1
به زودی ادامه مبحث شی گرایی

قبلش بگم واقعا به فکر سلامتی تون باشید و حتماً ورزش کنید👌
توی کارهای فریلنسری اول پول رو بگیرید بعد کار انجام بدید
قرار داد سفت و سخت ببندید
و یه پشتوانه ایجاد کنید برای کار که بعدا اگر اتفاقی افتاد بتونید پیگیری کنید
به قول یه بنده خدایی این کتابای زرد روانشناسی آدم رو نادان تر میکنه تا داناتر
هیچی بدتر از توهم دانایی نیست
شاید تک و توک کتاب هایی پیدا بشن که واقعا به درد بخور باشن
سطح دسترسی یا Access Modifier چیه؟

فرض کنید شما میخواید از متغیرهاتون داخل کلاس های دیگه یا حتی یک پروژه دیگه که داخل Solution هست استفاده کنید. البته فقط به متغیرها ختم نمیشه و هر شی ء که که شما بخواید میشه سطح دسترسیش رو مشخص کرد

در چنین حالتی نیاز هست شما با سطح دسترسی ها آشنا بشید

ما سطوح دسترسی مختلفی توی سی شارپ داریم که این موارد هستن:

private
public
protected
internal
private protected
private internal

#شی_گرایی
سطح دسترسی private به این معنی هست که اون متغیر یا شی یا متد یا هر چیز دیگه ای که ما این رو به عنوان سطح دسترسی قرار بدیم فقط توی همون کلاس قابل استفاده هست و اگر ما بخوایم توی کلاس دیگری استفاده کنیم با مشکل مواجه میشیم حتی اگر یک instance یا نمونه ازش بسازیم

مثال:

public class Class1
{
private string firstName;
}


اگر بخوایم در کلاس دومی استفاده کنیم با مشکل مواجه میشیم:

public class Class2
{
Class1 cls=new Class1();

Console.WriteLine(cls.firstName);
}
احتمالا شما اسم کپسوله سازی یا Encapsulation رو شنیدید

کلا توی سی شارپ به این معنی هست شما باید یه سری چیزا رو از دید بقیه پنهان کنی و مستقیما اجازه ندی استفاده بشه که همین سطح دسترسی privae این کار رو انجام میده
یا اگر بخوام بهتر بگم اون چیزی که شما باید انجام بدید اینه که به صورت عمومی اون مقدار تخصیص داده بشه

مثال:
فرض کنیم میخوایم توی خروجی باقی مانده یه حساب بانکی رو نمایش بدیم کلاس اول ما اینه:

public class BankAccount
{
private decimal balance; از بیرون قابل دسترسی نیست

public void Deposit(decimal amount)
{
if (amount > 0)
balance += amount;
}

public decimal GetBalance()
{
return balance;
}
}


اگر ما بخوایم مستقیم به این شکل بهش دسترسی داشته باشیم این اجازه رو به ما نمیده:


BankAccount acc = new BankAccount();
acc.balance = 10000;

در این حالت خطا میگیریم چون متغیر balance به صورت خصوصی یا private مشخص شده

منطقی ترین کار اینه که این شکلی انجام بدیم:


acc.Deposit(10000); متد عمومی برای اضافه کردن پول به حساب
Console.WriteLine(acc.GetBalance()); گرفتن موجودی


اینجوری خیلی راحت تر هم خونده میشه و ما دیگه حواسمون هست که متد Deposit پول اضافه میکنه به حساب و با متد GetBalance میتونیم موجودی حساب رو بگیریم
از مزیت های کپسوله سازی چیه؟

1️⃣امنیت داده های ما حفظ میشه چون مستقیما بقیه نمیتونن دسترسی داشته باشن
2️⃣بعدا که با API آشنا میشیم اونجا خیلی کاربردیه چون شما ساختار داخل API که تغییر بدی نیازی نیست بقیه جاها به صورت دستی تغییر بدی
3️⃣اعتبار سنجی داده(Data Validation): مثلا حساب بانکی نمیتونه هیچ وقت منفی یا 0 باشه پس خیلی راحت توی کلاس پایه مربوط به حساب بانکی میتونی این مورد رو بررسی کنی و اگر کاربر سعی داشت منفی کنه اجازه این کار رو بهش ندی
سطح دسترسی public

این سطح دسترسی به این معنا هست که شما از اون متد،متغیر،کلاس،property میتونید در بقیه جاها هم استفاده کنید

مثال:


public class Class1
{
public string firstName;
}


کلاس دوم:


public class Class2;
{
Class1 cls1=new Class1();
cls1.firstName="Hassan";
Console.WriteLine(cls1.firstName);
}


بر خلاف private در سطح دسترسی public میتونیم مستقیما به اون متغیر یا متد و... دسترسی داشته باشیم
سطح دسترسی public مثلا کجاها به کارمون میاد؟

زمانی که شما یه متد داری توی یه کلاس دیگه میخوای ازش استفاده کنی

یا میخوای یه کلاس رو داخل یه پروژه ای که چند لایه(Multi Layer) هست استفاده کنی به شدت اهمیت پیدا میکنه

چون دو پروژه در فضای نام(Namespace) های مختلفی هستند و تا زمانی که سطح دسترسی public نباشه قابلیت دسترسی از بیرون رو نداره

داخل api ها هم خیلی کاربردی میشن چرا که اون کلاس هایی که قراره داده یا دیتا برگردونن برا این کار باید سطح دسترسی شون public باشه تا قابل استفاده باشه

بعدا با class library آشنا میشیم و یکی از کاربردهای public رو اونجا می بینیم
اما استفاده زیاد ازش توصیه نمیشه مگر این که مطمئن باشید از این که بیرون حتما باید دسترسی بهش باشه

و کلاس یا متدی که پابلیک باشه زمانی که به شکل public تعریف میشه ممکنه توی جاهای دیگه ای که ازش استفاده شده تاثیر بزاره
سطح دسترسی internal

در واقع مشخص میکنه که این کلاس،اینترفیس یا هر چیز دیگه ای
میتونه داخل همون سولوشن یا اصلا بهتره بگیم داخل اون اسمبلی قابل استفاده هست

فرض کنید پروژه شما چند لایه هست و از چندین تا class library استفاده کردید حالا میخواید کلاس ها فقط توی همون پروژه بتونیم بهشون دسترسی داشته باشیم

مثال:

Solution MyApp

├── Project.Data (Class Library)
│ └── UserData.cs

├── Project.UI (Console App)
└── Program.cs

پروژه با همچنین ساختاری داریم که داخل class library اومدیم یه کلاس ساختیم به اسم UserData



namespace Project.Data
{
internal class UserData
{
public string GetUserName()
{
return "Hassan";
}
}
}


حالا توی پروژه کنسولی UI همچنین چیزی رو می نویسیم:


using Project.Data;

UserData user = new UserData();

خطا میده چون کلاس UserData به صورت internal یا داخلی تعریف شده و نمیشه بهش دسترسی داشت