اما توی این کد پایین ما یک کلاس تعریف کردیم که با یه نگاه خیلی ساده می بینیم خیلی خیلی منطقی تر هست تا کدی که ما نوشته بودیم برای اتصال به دیتابیس،حذف کاربر و بعد بستن ارتباط با دیتابیس
توی این مثال یک کلاس به اسم DatabaseBHelper ساخته شده(هر اسمی قابل استفاده هست و کاملا دلخواه هست)
یک رشته اتصال تعریف کردیم که وصل میشیم به دیتابیس
یک متد به اسم DeleteUserByID تعریف کردیم که باعث میشه کاربر حذف بشه بر اساس آیدی.یک ورودی میگیره از نوع int که شناسه کاربر قاعدتا همیشه int یا عدد صحیح هست
در داخل بدنه اونجایی که از using استفاده شده برای اینه که نیازی به بستن ارتباط یا کانکشن به صورت عادی مثل connection.Close() نباشه و از using برای جلوگیری از هدر رفت منابع استفاده میکنیم که خودش خودکار ببنده
و در ادامه دستورات قبلی برای وصل شدن به دیتابیس،حذف کاربر،باز کردن اتصال و اجرای دستور رو می نویسیم
حالا اگر از این متد بخوایم جای دیگه ای هم استفاده کنیم خیلی کارمون راحت تره
فرض کنید قراره شما هم خودتون توی لیست کابران داخل سایتتون بتونید کاربر رو دستی حذفش کنید و هم این که خود کاربر بهش اجازه بدید با مسئولیت خودش حساب رو حذف کنه
در چنین حالتی نیاز ندارید که برای هر دو بخش یک متد جداگانه بنویسید بلکه از همین کلاس و متد میتونید استفاده کنید برای این کار
#شی_گرایی
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
اگه هنوز مقاله ننوشتی یا نمیدونی چطور باید شروع کنی، این دوره دقیقاً برای تو طراحی شده 👇
📚 دوره جامع مقالهنویسی علمی
در قالب ۳ کارگاه تخصصی – هر کدام فقط در ۲ روز
📍 کارگاه اول: مقالهنویسی کنفرانسی (پایه و پیشنیاز دو کارگاه بعدی)
🟢 آموزش از صفر تا نگارش و ارسال مقاله به کنفرانس
📆 تاریخ برگزاری: ۸ و ۹ مرداد
💰 هزینه: ۱۹۹ هزار تومان
📍 کارگاه دوم: مقالهنویسی علمی پژوهشی داخلی
تاریخ برگزاری: ۱۵ و ۱۶ مرداد
💰 هزینه: ۲۹۹ هزار تومان
📍 کارگاه سوم: پاسخ به داوران و بازنویسی مقاله علمی
تاریخ برگزاری: ۲۹ و ۳۰ مرداد
💰 هزینه: ۲۹۹ هزار تومان
🎁 ثبتنام در هر سه کارگاه با تخفیف ویژه: فقط ۶۹۹ هزار تومان
✨ مزایای دوره:
✅ فایل قالب مقاله + معرفی کنفرانسها و مجلات
✅ مناسب رزومه مصاحبه ارشد، دکتری، فرهنگیان و رتبه بندی معلمان
👩🏫 مدرس دوره: زهرا رفعتجو – مدرس و پژوهشگر و دکتری دانشگاه شیراز
♦️شیوه برگزاری: آنلاین در اسکای روم
📥 ثبتنام در واتسپ:
https://wa.me/989017028743
❤1
کانال توسعه دهندگان سی شارپ
🎯 آیا میدونی داشتن مقاله یکی از مهمترین امتیازها در مصاحبههای دانشگاهی و استخدامیه؟ اگه هنوز مقاله ننوشتی یا نمیدونی چطور باید شروع کنی، این دوره دقیقاً برای تو طراحی شده 👇 📚 دوره جامع مقالهنویسی علمی در قالب ۳ کارگاه تخصصی – هر کدام فقط در ۲ روز…
اگر به نوشتن مقاله علاقه مند هستید میتونید ثبت نام کنید
به زودی ادامه مبحث شی گرایی
قبلش بگم واقعا به فکر سلامتی تون باشید و حتماً ورزش کنید👌
قبلش بگم واقعا به فکر سلامتی تون باشید و حتماً ورزش کنید👌
توی کارهای فریلنسری اول پول رو بگیرید بعد کار انجام بدید
قرار داد سفت و سخت ببندید
و یه پشتوانه ایجاد کنید برای کار که بعدا اگر اتفاقی افتاد بتونید پیگیری کنید
قرار داد سفت و سخت ببندید
و یه پشتوانه ایجاد کنید برای کار که بعدا اگر اتفاقی افتاد بتونید پیگیری کنید
سلام دوستان امروز به مبحث سطح دسترسی یا access modifier میپردازیم قبلا در خصوص کاربرد کلاس و متد صحبت کردیم که میتونید از اینجا شروع کنید:
https://t.me/csharpdeveloperss/194
https://t.me/csharpdeveloperss/279
همچنین با هشتگ #شی_گرایی میتونید دسترسی داشته باشید بهش
https://t.me/csharpdeveloperss/194
https://t.me/csharpdeveloperss/279
همچنین با هشتگ #شی_گرایی میتونید دسترسی داشته باشید بهش
Telegram
کانال توسعه دهندگان سی شارپ
اول از همه در خصوص مزیت شی گرایی صحبت میکنیم
شی گرایی کارش چیه؟ این که ما بتونیم کدهای خودمون رو ساختارمندتر بنویسیم و از شلوغی کد و بهم ریختگی ها جلوگیری کنیم
تمامی مباحثی که در شی گرایی مورد بحث قرار میگیرن این ها خواهند بود:
کلاس ها و متدها
سازنده(Constructor)…
شی گرایی کارش چیه؟ این که ما بتونیم کدهای خودمون رو ساختارمندتر بنویسیم و از شلوغی کد و بهم ریختگی ها جلوگیری کنیم
تمامی مباحثی که در شی گرایی مورد بحث قرار میگیرن این ها خواهند بود:
کلاس ها و متدها
سازنده(Constructor)…
سطح دسترسی یا Access Modifier چیه؟
فرض کنید شما میخواید از متغیرهاتون داخل کلاس های دیگه یا حتی یک پروژه دیگه که داخل Solution هست استفاده کنید. البته فقط به متغیرها ختم نمیشه و هر شی ء که که شما بخواید میشه سطح دسترسیش رو مشخص کرد
در چنین حالتی نیاز هست شما با سطح دسترسی ها آشنا بشید
ما سطوح دسترسی مختلفی توی سی شارپ داریم که این موارد هستن:
private
public
protected
internal
private protected
private internal
#شی_گرایی
فرض کنید شما میخواید از متغیرهاتون داخل کلاس های دیگه یا حتی یک پروژه دیگه که داخل 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 این کار رو انجام میده
یا اگر بخوام بهتر بگم اون چیزی که شما باید انجام بدید اینه که به صورت عمومی اون مقدار تخصیص داده بشه
مثال:
فرض کنیم میخوایم توی خروجی باقی مانده یه حساب بانکی رو نمایش بدیم کلاس اول ما اینه:
اگر ما بخوایم مستقیم به این شکل بهش دسترسی داشته باشیم این اجازه رو به ما نمیده:
در این حالت خطا میگیریم چون متغیر balance به صورت خصوصی یا private مشخص شده
منطقی ترین کار اینه که این شکلی انجام بدیم:
اینجوری خیلی راحت تر هم خونده میشه و ما دیگه حواسمون هست که متد Deposit پول اضافه میکنه به حساب و با متد GetBalance میتونیم موجودی حساب رو بگیریم
کلا توی سی شارپ به این معنی هست شما باید یه سری چیزا رو از دید بقیه پنهان کنی و مستقیما اجازه ندی استفاده بشه که همین سطح دسترسی 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 باشه پس خیلی راحت توی کلاس پایه مربوط به حساب بانکی میتونی این مورد رو بررسی کنی و اگر کاربر سعی داشت منفی کنه اجازه این کار رو بهش ندی
1️⃣امنیت داده های ما حفظ میشه چون مستقیما بقیه نمیتونن دسترسی داشته باشن
2️⃣بعدا که با API آشنا میشیم اونجا خیلی کاربردیه چون شما ساختار داخل API که تغییر بدی نیازی نیست بقیه جاها به صورت دستی تغییر بدی
3️⃣اعتبار سنجی داده(Data Validation): مثلا حساب بانکی نمیتونه هیچ وقت منفی یا 0 باشه پس خیلی راحت توی کلاس پایه مربوط به حساب بانکی میتونی این مورد رو بررسی کنی و اگر کاربر سعی داشت منفی کنه اجازه این کار رو بهش ندی
سطح دسترسی public
این سطح دسترسی به این معنا هست که شما از اون متد،متغیر،کلاس،property میتونید در بقیه جاها هم استفاده کنید
مثال:
کلاس دوم:
بر خلاف private در سطح دسترسی 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 رو اونجا می بینیم
زمانی که شما یه متد داری توی یه کلاس دیگه میخوای ازش استفاده کنی
یا میخوای یه کلاس رو داخل یه پروژه ای که چند لایه(Multi Layer) هست استفاده کنی به شدت اهمیت پیدا میکنه
چون دو پروژه در فضای نام(Namespace) های مختلفی هستند و تا زمانی که سطح دسترسی public نباشه قابلیت دسترسی از بیرون رو نداره
داخل api ها هم خیلی کاربردی میشن چرا که اون کلاس هایی که قراره داده یا دیتا برگردونن برا این کار باید سطح دسترسی شون public باشه تا قابل استفاده باشه
بعدا با class library آشنا میشیم و یکی از کاربردهای public رو اونجا می بینیم
اما استفاده زیاد ازش توصیه نمیشه مگر این که مطمئن باشید از این که بیرون حتما باید دسترسی بهش باشه
و کلاس یا متدی که پابلیک باشه زمانی که به شکل public تعریف میشه ممکنه توی جاهای دیگه ای که ازش استفاده شده تاثیر بزاره
و کلاس یا متدی که پابلیک باشه زمانی که به شکل public تعریف میشه ممکنه توی جاهای دیگه ای که ازش استفاده شده تاثیر بزاره
سطح دسترسی internal
در واقع مشخص میکنه که این کلاس،اینترفیس یا هر چیز دیگه ای
میتونه داخل همون سولوشن یا اصلا بهتره بگیم داخل اون اسمبلی قابل استفاده هست
فرض کنید پروژه شما چند لایه هست و از چندین تا class library استفاده کردید حالا میخواید کلاس ها فقط توی همون پروژه بتونیم بهشون دسترسی داشته باشیم
مثال:
Solution MyApp
│
├── Project.Data (Class Library)
│ └── UserData.cs
│
├── Project.UI (Console App)
└── Program.cs
پروژه با همچنین ساختاری داریم که داخل class library اومدیم یه کلاس ساختیم به اسم UserData
حالا توی پروژه کنسولی UI همچنین چیزی رو می نویسیم:
خطا میده چون کلاس UserData به صورت 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 یا داخلی تعریف شده و نمیشه بهش دسترسی داشت
بعد از انگلیسی از اسپانیولی خوشم میاد خیلی زبان قشنگیه و بر خلاف انگلیسی یه کلمه فقط یه جور تلفظ میشه و فقط یه معنی داره
ممکنه توی کشورهای اسپانیولی زبان فقط حروف متفاوت تلفظ بشن
ولی خیلی زبان قشنگیه دوست دارم یادش بگیرم😅
ممکنه توی کشورهای اسپانیولی زبان فقط حروف متفاوت تلفظ بشن
ولی خیلی زبان قشنگیه دوست دارم یادش بگیرم😅
ادامه آموزش ها متنی باشه یا ویدیویی؟
Anonymous Poll
29%
متنی
47%
ویدیویی
24%
به صورت آنلاین در گوگل میت
کسی که زبان بلد نباشه از نظر من واقعا بی سواده
خود من دو بار عراق رفتم وقتی زبان و فرهنگ یک کشور رو بدونی خیلی راحت میشه باهاشون ارتباط بگیری حتی از همین طریق کاربگیری
زبان انگلیسی و بقیه زبان ها که جای خود داره
اگر مثل خودمم نمیتونی بری کلاس زبان حضوری
هر روز از chatgpt بخواه چند تا کلمه بهت بده برات مثال بزنه توی گرامر هم توضیح بده
خود من دو بار عراق رفتم وقتی زبان و فرهنگ یک کشور رو بدونی خیلی راحت میشه باهاشون ارتباط بگیری حتی از همین طریق کاربگیری
زبان انگلیسی و بقیه زبان ها که جای خود داره
اگر مثل خودمم نمیتونی بری کلاس زبان حضوری
هر روز از chatgpt بخواه چند تا کلمه بهت بده برات مثال بزنه توی گرامر هم توضیح بده
👍2
کانال توسعه دهندگان سی شارپ
ادامه آموزش ها متنی باشه یا ویدیویی؟
مساوی هست نظرات😁
پس ترکیبی میرم جلو
پس ترکیبی میرم جلو
بهترین کاری که میتونی انجام بدی که حقیقتا چه توی برنامه نویسی چه توی زندگی عادی و معمولی خودت رشد کنی
اینه از هر چی که تو رو به هم میریزه دوری کنی
یه بنده خدایی میگفت گروه های تلگرامی قاتل برنامه نویس های جونیور و تازه کار هستن
و راست هم میگفت
به جز دو گروه سی شارپ که دارم هیچ گروه دات نتی دیگه ای عضو نیستم و تا حد امکان دارم هر چی گروه چرت و پرت هست رو ترک میکنم
یاد گرفتن تخصصی و دقیق اینه بری توی گیت هاب و w3school و gpt و اینا ولگردی کنی و سوال بپرسی و مشکلت رو حل کنی
از خیلی این گروه ها آبی گرم نمیشه
کاش حداقل اینم داشت که مثلا آخر هر هفته یه ویس چت یا میت آنلاین وجود داشت که افراد تجربیات خودشون رو در اختیار بقیه قرار میدادن و چهار تا حرف درست و حسابی رد و بدل میشد
حالا که اینجور نیست و ما نمیتونیم کل دنیا رو مثل خودمون کنیم پس بهتره در حد خودمون کارایی که گفتم رو انجام بدیم
اینه از هر چی که تو رو به هم میریزه دوری کنی
یه بنده خدایی میگفت گروه های تلگرامی قاتل برنامه نویس های جونیور و تازه کار هستن
و راست هم میگفت
به جز دو گروه سی شارپ که دارم هیچ گروه دات نتی دیگه ای عضو نیستم و تا حد امکان دارم هر چی گروه چرت و پرت هست رو ترک میکنم
یاد گرفتن تخصصی و دقیق اینه بری توی گیت هاب و w3school و gpt و اینا ولگردی کنی و سوال بپرسی و مشکلت رو حل کنی
از خیلی این گروه ها آبی گرم نمیشه
کاش حداقل اینم داشت که مثلا آخر هر هفته یه ویس چت یا میت آنلاین وجود داشت که افراد تجربیات خودشون رو در اختیار بقیه قرار میدادن و چهار تا حرف درست و حسابی رد و بدل میشد
حالا که اینجور نیست و ما نمیتونیم کل دنیا رو مثل خودمون کنیم پس بهتره در حد خودمون کارایی که گفتم رو انجام بدیم
👍2