دیروز روز برنامه نویس بود و من فراموش کردم تبریک بگم
مبارک همه کسایی که دارن سخت تلاش میکنن و هر روز یه باگ رو رفع میکنن 😘❤️
مبارک همه کسایی که دارن سخت تلاش میکنن و هر روز یه باگ رو رفع میکنن 😘❤️
❤5🥰1
شاید فعالیتم این مدت کمتر بشه، چون در حال آمادهسازی یه دوره جامع، پروژهمحور و بهروز از سی شارپ هستم 😍✅
به زودی خبرای خیلی خوبی براتون دارم!
به زودی خبرای خیلی خوبی براتون دارم!
🔥4👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🐜 انیمیشن کوتاه Ant – وقتی یک مورچهیِ متفاوت سازمان رو متحول میکنه!
👍4
📌 تفاوت IsNullOrEmpty و IsNullOrWhiteSpace در سی شاپ
در زبان #CSharp برای بررسی اینکه یک رشته مقداردهی شده یا نه، معمولاً از متد string.IsNullOrEmpty() استفاده میکنیم. این متد بررسی میکنه که رشته null یا خالی ("") نباشه.
اما یه نکتهی مهم اینه که این متد فاصلهها (مثل " " یا "\t") رو خالی حساب نمیکنه. یعنی رشتهای که فقط شامل فاصله باشه، از نظر IsNullOrEmpty معتبره!
برای بررسی دقیقتر، باید از string.IsNullOrWhiteSpace() استفاده کنیم. این متد علاوه بر null و خالی بودن، رشتههایی که فقط شامل فاصله یا تب هستن رو هم نامعتبر در نظر میگیره.
✅ مثال:
استفاده از IsNullOrWhiteSpace در اعتبارسنجی ورودیها، فرمها، و دادههای کاربر باعث جلوگیری از باگهای پنهان میشه.
در زبان #CSharp برای بررسی اینکه یک رشته مقداردهی شده یا نه، معمولاً از متد string.IsNullOrEmpty() استفاده میکنیم. این متد بررسی میکنه که رشته null یا خالی ("") نباشه.
اما یه نکتهی مهم اینه که این متد فاصلهها (مثل " " یا "\t") رو خالی حساب نمیکنه. یعنی رشتهای که فقط شامل فاصله باشه، از نظر IsNullOrEmpty معتبره!
برای بررسی دقیقتر، باید از string.IsNullOrWhiteSpace() استفاده کنیم. این متد علاوه بر null و خالی بودن، رشتههایی که فقط شامل فاصله یا تب هستن رو هم نامعتبر در نظر میگیره.
✅ مثال:
string a = null;
string b = "";
string c = " ";
Console.WriteLine(string.IsNullOrEmpty(a)); // true
Console.WriteLine(string.IsNullOrEmpty(b)); // true
Console.WriteLine(string.IsNullOrEmpty(c)); // false ❌
Console.WriteLine(string.IsNullOrWhiteSpace(c)); // true ✅
استفاده از IsNullOrWhiteSpace در اعتبارسنجی ورودیها، فرمها، و دادههای کاربر باعث جلوگیری از باگهای پنهان میشه.
👍4❤3🔥2
از Magic Numbers اجتناب کنید !!
وقتی در متد IsFreeShipping عدد 5000 به صورت مستقیم استفاده شده مشخص نیست این عدد چه مفهومی دارد. ممکن است نشان دهنده ی «حداقل مبلغ برای ارسال رایگان» باشد یا صرفاً یک عدد است که یکی برای تست نوشته است . چنین افتضاحی باعث میشود کد مبهم و غیر قابل درک شود.
راه کار درست این است که مقدار 5000 به صورت یک ثابت معنادار مثل FreeShippingThreshold تعریف شود.
در این حالت هدف عدد به وضوح مشخص است، کد خواناتر میشود و در صورت تغییر سیاست فروشگاه (مثلاً افزایش این مقدار / میزان به 6000)، تنها کافی است مقدار ثابت تغییر داده شود و نیاز به تغییر در بخش های متعدد کد نخواهد بود.
🔗 LinkedIn Post
وقتی در متد IsFreeShipping عدد 5000 به صورت مستقیم استفاده شده مشخص نیست این عدد چه مفهومی دارد. ممکن است نشان دهنده ی «حداقل مبلغ برای ارسال رایگان» باشد یا صرفاً یک عدد است که یکی برای تست نوشته است . چنین افتضاحی باعث میشود کد مبهم و غیر قابل درک شود.
راه کار درست این است که مقدار 5000 به صورت یک ثابت معنادار مثل FreeShippingThreshold تعریف شود.
در این حالت هدف عدد به وضوح مشخص است، کد خواناتر میشود و در صورت تغییر سیاست فروشگاه (مثلاً افزایش این مقدار / میزان به 6000)، تنها کافی است مقدار ثابت تغییر داده شود و نیاز به تغییر در بخش های متعدد کد نخواهد بود.
🔗 LinkedIn Post
👍5
🚀 نقشه راه فارسی ASP.NET Core – ۲۰۲۵
اگر تازه میخوای ASP.NET Core یاد بگیری یا مسیرت رو سازماندهی کنی، این مخزن برات مفیده.
قدمبهقدم مسیرها، ابزارها و کتابخانههای کلیدی برای تبدیل شدن به یک توسعهدهنده حرفهای ASP.NET Core در این نقشه راه فارسی جمعآوری شده.
⭐️ بررسی کن، ستاره بده و یادگیریت رو برنامهریزی کن:
https://github.com/hheydarian/AspNetCore-Developer-Roadmap-persian
اگر تازه میخوای ASP.NET Core یاد بگیری یا مسیرت رو سازماندهی کنی، این مخزن برات مفیده.
قدمبهقدم مسیرها، ابزارها و کتابخانههای کلیدی برای تبدیل شدن به یک توسعهدهنده حرفهای ASP.NET Core در این نقشه راه فارسی جمعآوری شده.
⭐️ بررسی کن، ستاره بده و یادگیریت رو برنامهریزی کن:
https://github.com/hheydarian/AspNetCore-Developer-Roadmap-persian
GitHub
GitHub - hheydarian/AspNetCore-Developer-Roadmap-persian: Roadmap ASP.NET Core 2025
Roadmap ASP.NET Core 2025 . Contribute to hheydarian/AspNetCore-Developer-Roadmap-persian development by creating an account on GitHub.
❤5👍2🆒2
Forwarded from سامانه اطلاعات مدیریت آرمان
#سامانه_سیستم_اطلاعات_مدیریت_آرمان
نسخه: V218-cff21d5, 1404/06/24
تعریف گزارش روزانه پروژه
تکمیل بخش ترازنامه مالی
تعریف سطح دسترسی ها با قالب جدید
نسخه دمو سامانه مدیریت اطلاعات آرمان:
💻 http://bgsarmansystem.tryasp.net/
User: demo1
Pass: Demo@1234
کانال سامانه مدیریت اطلاعات آرمان:
👉 https://news.1rj.ru/str/bgsarmansystem
وب سایت شرکت بهینه گستر صنایع آرمان:
https://bgsiran.ir
تلگرام:
📡 https://news.1rj.ru/str/ijieor
📡 http://t.me/bgsarman1
👉 https://news.1rj.ru/str/drrezalotfi
👉 https://news.1rj.ru/str/OREUROONLINE
👉 https://news.1rj.ru/str/bgsarmansystem
ایتا:
https://eitaa.com/bgsarman1
بله:
https://ble.ir/bgsarman1
روبیکا:
https://rubika.ir/bgsarman1
نسخه: V218-cff21d5, 1404/06/24
تعریف گزارش روزانه پروژه
تکمیل بخش ترازنامه مالی
تعریف سطح دسترسی ها با قالب جدید
نسخه دمو سامانه مدیریت اطلاعات آرمان:
💻 http://bgsarmansystem.tryasp.net/
User: demo1
Pass: Demo@1234
کانال سامانه مدیریت اطلاعات آرمان:
👉 https://news.1rj.ru/str/bgsarmansystem
وب سایت شرکت بهینه گستر صنایع آرمان:
https://bgsiran.ir
تلگرام:
📡 https://news.1rj.ru/str/ijieor
📡 http://t.me/bgsarman1
👉 https://news.1rj.ru/str/drrezalotfi
👉 https://news.1rj.ru/str/OREUROONLINE
👉 https://news.1rj.ru/str/bgsarmansystem
ایتا:
https://eitaa.com/bgsarman1
بله:
https://ble.ir/bgsarman1
روبیکا:
https://rubika.ir/bgsarman1
👍2
🤔 چرا == همیشه جواب نمیده؟ تفاوتش با .Equals() توی سی شارپ چیه؟
فرض کن داری یه فرم ثبتنام میسازی و میخوای بررسی کنی که دو مقدار ورودی با هم برابرن یا نه. میزنی:
ولی یه روز میبینی که مقایسه درست کار نمیکنه—در حالی که مقدارها یکیان! اینجاست که باید بدونی تفاوت == و .Equals() چیه.
🔹 == برای انواع پایه مثل int, string, bool معمولاً خوب جواب میده.
🔹 ولی برای کلاسهای سفارشی، ممکنه فقط آدرس حافظه رو مقایسه کنه—not the actual content.
مثال:
اما حالا یه کلاس ساده بساز:
و مقایسه کن:
چرا؟ چون هیچکدوم از اینها مقدار Name رو مقایسه نمیکنن. اگه بخوای .Equals() درست کار کنه، باید Overrideش کنی:
📌 نتیجه؟ اگه با کلاسهای سفارشی کار میکنی، همیشه حواست باشه که == ممکنه گمراهت کنه. برای مقایسهی واقعی، از .Equals() استفاده کن و اگه لازم شد، Overrideش کن.
فرض کن داری یه فرم ثبتنام میسازی و میخوای بررسی کنی که دو مقدار ورودی با هم برابرن یا نه. میزنی:
c#
if (input1 == input2) { /* do something */ }
ولی یه روز میبینی که مقایسه درست کار نمیکنه—در حالی که مقدارها یکیان! اینجاست که باید بدونی تفاوت == و .Equals() چیه.
🔹 == برای انواع پایه مثل int, string, bool معمولاً خوب جواب میده.
🔹 ولی برای کلاسهای سفارشی، ممکنه فقط آدرس حافظه رو مقایسه کنه—not the actual content.
مثال:
c#
string a = "hello";
string b = new string("hello".ToCharArray());
Console.WriteLine(a == b); // true ✅
Console.WriteLine(a.Equals(b)); // true ✅
اما حالا یه کلاس ساده بساز:
c#
class Person {
public string Name;
}
و مقایسه کن:
c#
var p1 = new Person { Name = "Hamed" };
var p2 = new Person { Name = "Hamed" };
Console.WriteLine(p1 == p2); // false ❌
Console.WriteLine(p1.Equals(p2)); // false ❌
چرا؟ چون هیچکدوم از اینها مقدار Name رو مقایسه نمیکنن. اگه بخوای .Equals() درست کار کنه، باید Overrideش کنی:
c#
public override bool Equals(object obj)
{
return obj is Person other && this.Name == other.Name;
}
📌 نتیجه؟ اگه با کلاسهای سفارشی کار میکنی، همیشه حواست باشه که == ممکنه گمراهت کنه. برای مقایسهی واقعی، از .Equals() استفاده کن و اگه لازم شد، Overrideش کن.
👍3❤2🔥1
Forwarded from InvestFund
This media is not supported in your browser
VIEW IN TELEGRAM
🎞 سم التمن: موفقیت ربطی به باهوش بودن نداره!
💡خیلیها فکر میکنن بهترین فاندرها برنده میشن چون باهوشترن، شبکه قویتری دارن یا توی حوزهشون تخصص بالایی دارن. ولی سم التمن (باتجربه YC و OpenAI) میگه رمز اصلی این نیست.
اما سم التمن میگه رمز اصلی چیز دیگهست: سرسختی و پافشاری بیوقفه. همون چیزی که پل گراهام بهش میگه «relentlessly resourceful».
📌 التمن میگه سه ویژگی حیاتی توی همهی فاندرهای موفق مشترکه:
▫️تمرکز: حواسپرتیها رو کنار بذارن و فقط کار اصلی رو جلو ببرن.
▫️باور به خود: چون اگه خودت باور نکنی، هیچکس دیگهای باور نمیکنه.
▫️ارتباطات شخصی: از جذب تیم و سرمایه تا فروش ویژن و ساختن اعتماد.
📍و یک عامل مهم دیگه که خیلیها دستکم میگیرن: ارتباط شفاف و ساده. تقریباً همهی استارتاپهای بزرگ فاندرهایی داشتن که میتونستن ایدهشون رو در کمتر از ۲۵ کلمه توضیح بدن.
📌 فاندرهایی که این ویژگیها رو داشته باشن، تیم قوی میسازن، اعتماد میگیرن و ایدهشون رو به نتیجه میرسونن.
@Investingfund
💡خیلیها فکر میکنن بهترین فاندرها برنده میشن چون باهوشترن، شبکه قویتری دارن یا توی حوزهشون تخصص بالایی دارن. ولی سم التمن (باتجربه YC و OpenAI) میگه رمز اصلی این نیست.
اما سم التمن میگه رمز اصلی چیز دیگهست: سرسختی و پافشاری بیوقفه. همون چیزی که پل گراهام بهش میگه «relentlessly resourceful».
📌 التمن میگه سه ویژگی حیاتی توی همهی فاندرهای موفق مشترکه:
▫️تمرکز: حواسپرتیها رو کنار بذارن و فقط کار اصلی رو جلو ببرن.
▫️باور به خود: چون اگه خودت باور نکنی، هیچکس دیگهای باور نمیکنه.
▫️ارتباطات شخصی: از جذب تیم و سرمایه تا فروش ویژن و ساختن اعتماد.
📍و یک عامل مهم دیگه که خیلیها دستکم میگیرن: ارتباط شفاف و ساده. تقریباً همهی استارتاپهای بزرگ فاندرهایی داشتن که میتونستن ایدهشون رو در کمتر از ۲۵ کلمه توضیح بدن.
📌 فاندرهایی که این ویژگیها رو داشته باشن، تیم قوی میسازن، اعتماد میگیرن و ایدهشون رو به نتیجه میرسونن.
@Investingfund
❤2👏2👍1
سلام وقت بخیر.
من یه پروژه مایکروسرویسی با دات نت اسپایر کار کردم. که نکات و معماری و پترن های خوبی داخلش هست که میتونید ازش استفاده کنید.
در صورتی که خوشتون اومد ، خوشحال میشم به این ریپازیتوری من ستاره بزنید .
https://github.com/YAS-SIIN/PlainBridge
<Yasin/>
من یه پروژه مایکروسرویسی با دات نت اسپایر کار کردم. که نکات و معماری و پترن های خوبی داخلش هست که میتونید ازش استفاده کنید.
در صورتی که خوشتون اومد ، خوشحال میشم به این ریپازیتوری من ستاره بزنید .
https://github.com/YAS-SIIN/PlainBridge
<Yasin/>
❤7👍1
♨️مایکروسافت اعلام کرد: پشتیبانی ۲۴ ماهه برای نسخههای STS در NET 9. تا 2026
مایکروسافت مدت پشتیبانی نسخههای STS در NET. را از ۱۸ ماه به ۲۴ ماه افزایش داد. این تغییر از NET 9. آغاز میشود و تا نوامبر ۲۰۲۶ ادامه دارد. نسخههای LTS همچنان سه سال پشتیبانی خواهند داشت.
اطلاعات بیشتر 👇👇
https://bugeto.net/blog/dotnet-sts-releases-supported-for-24-months
مایکروسافت مدت پشتیبانی نسخههای STS در NET. را از ۱۸ ماه به ۲۴ ماه افزایش داد. این تغییر از NET 9. آغاز میشود و تا نوامبر ۲۰۲۶ ادامه دارد. نسخههای LTS همچنان سه سال پشتیبانی خواهند داشت.
اطلاعات بیشتر 👇👇
https://bugeto.net/blog/dotnet-sts-releases-supported-for-24-months
👍4❤2
🔍 تفاوت string و String در سی شارپ — نکتهای ساده ولی مهم
اگه تازه با سی شارپ شروع کرده باشی، احتمالاً دیدی که بعضیها از string استفاده میکنن و بعضیها از String.
شاید فکر کنی فرق دارن، ولی واقعیت اینه که:
🔹 string یه کلمه کلیدی توی زبان سی شارپ
🔹 String یه کلاس توی فضای نام System
در واقع، string فقط یه میانبر برای System.String ـ. یعنی این دو کاملاً معادلان:
string name = "Hamed";
String city = "Tehran";
هر دو متغیر از نوع System.String هستن و میتونی روی هر دو از متدهایی مثل .Length, .ToUpper(), .Contains() و غیره استفاده کنی.
📌 نکتهی مهم:
برای تعریف متغیرها، استفاده از string رایجتر و خواناتر هست.
ولی وقتی میخوای از متدهای کلاس String استفاده کنی (مثل String.IsNullOrEmpty())، باید از String استفاده کنی چون به کلاس اشاره داره.
این تفاوت کوچیک شاید توی اجرا تأثیری نداشته باشه، ولی توی سبک کدنویسی و خوانایی پروژه خیلی مهمه.
اگه تازه با سی شارپ شروع کرده باشی، احتمالاً دیدی که بعضیها از string استفاده میکنن و بعضیها از String.
شاید فکر کنی فرق دارن، ولی واقعیت اینه که:
🔹 string یه کلمه کلیدی توی زبان سی شارپ
🔹 String یه کلاس توی فضای نام System
در واقع، string فقط یه میانبر برای System.String ـ. یعنی این دو کاملاً معادلان:
string name = "Hamed";
String city = "Tehran";
هر دو متغیر از نوع System.String هستن و میتونی روی هر دو از متدهایی مثل .Length, .ToUpper(), .Contains() و غیره استفاده کنی.
📌 نکتهی مهم:
برای تعریف متغیرها، استفاده از string رایجتر و خواناتر هست.
ولی وقتی میخوای از متدهای کلاس String استفاده کنی (مثل String.IsNullOrEmpty())، باید از String استفاده کنی چون به کلاس اشاره داره.
این تفاوت کوچیک شاید توی اجرا تأثیری نداشته باشه، ولی توی سبک کدنویسی و خوانایی پروژه خیلی مهمه.
👍2👨💻2❤1👏1
🧠 تفاوت Value Type و Reference Type در سی شارپ — پایهای ولی حیاتی
اگه بخوای کدنویسی سی شارپ رو عمیقتر یاد بگیری، باید بدونی که دادهها به دو دسته ی اصلی تقسیم میشن:
🔹 Value Type
🔹 Reference Type
ولی فرقشون چیه؟
✅ Value Type:
دادهها مستقیماً در حافظه ذخیره میشن.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، یه کپی از مقدار ساخته میشه.
مثال ها: int, double, bool, struct
int a = 5;
int b = a;
b = 10;
// a هنوز 5 هست
✅ Reference Type:
دادهها به صورت ارجاعی ذخیره میشن—یعنی متغیر فقط یه آدرس به حافظه داره.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، هر دو به یه محل حافظه اشاره میکنن.
مثال ها: class, string, array, object
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99;
// arr1 هم تغییر کرده
📌 نکته ی مهم: درک تفاوت این دو نوع داده، توی طراحی کلاس ها، مدیریت حافظه، و جلوگیری از باگ های عجیب خیلی مهمه.
اگه بخوای کدنویسی سی شارپ رو عمیقتر یاد بگیری، باید بدونی که دادهها به دو دسته ی اصلی تقسیم میشن:
🔹 Value Type
🔹 Reference Type
ولی فرقشون چیه؟
✅ Value Type:
دادهها مستقیماً در حافظه ذخیره میشن.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، یه کپی از مقدار ساخته میشه.
مثال ها: int, double, bool, struct
int a = 5;
int b = a;
b = 10;
// a هنوز 5 هست
✅ Reference Type:
دادهها به صورت ارجاعی ذخیره میشن—یعنی متغیر فقط یه آدرس به حافظه داره.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، هر دو به یه محل حافظه اشاره میکنن.
مثال ها: class, string, array, object
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99;
// arr1 هم تغییر کرده
📌 نکته ی مهم: درک تفاوت این دو نوع داده، توی طراحی کلاس ها، مدیریت حافظه، و جلوگیری از باگ های عجیب خیلی مهمه.
👍3❤2🔥1
🔄 تفاوت بین ==, .Equals(), و .CompareTo() در سی شارپ — مقایسهی حرفهای
اگه بخوای دو مقدار رو توی سی شارپ مقایسه کنی، گزینههای مختلفی داری: ولی هرکدوم رفتار خاص خودش رو داره.
✅ ==
برای مقایسهی مقدار استفاده میشه.
برای انواع پایه مثل int, string معمولاً خوب جواب میده.
ولی برای کلاسهای سفارشی ممکنه فقط آدرس حافظه رو مقایسه کنه.
✅ .Equals()
یه متد برای مقایسهی مقدار منطقی بین دو شیء.
میتونه Override بشه تا رفتار سفارشی داشته باشه.
✅ .CompareTo()
برای مقایسهی ترتیبی استفاده میشه.
خروجی عددی میده:
0 یعنی برابر
< 0 یعنی شیء اول کوچکتره
> 0 یعنی شیء اول بزرگتره
مثال:
string a = "apple";
string b = "banana";
Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(a.CompareTo(b)); // -1
📌 نکتهی حرفهای: اگه میخوای فقط برابری رو بررسی کنی، == یا .Equals() کافیه. ولی اگه میخوای ترتیب یا مرتبسازی انجام بدی، .CompareTo() انتخاب درستیه.
اگه بخوای دو مقدار رو توی سی شارپ مقایسه کنی، گزینههای مختلفی داری: ولی هرکدوم رفتار خاص خودش رو داره.
✅ ==
برای مقایسهی مقدار استفاده میشه.
برای انواع پایه مثل int, string معمولاً خوب جواب میده.
ولی برای کلاسهای سفارشی ممکنه فقط آدرس حافظه رو مقایسه کنه.
✅ .Equals()
یه متد برای مقایسهی مقدار منطقی بین دو شیء.
میتونه Override بشه تا رفتار سفارشی داشته باشه.
✅ .CompareTo()
برای مقایسهی ترتیبی استفاده میشه.
خروجی عددی میده:
0 یعنی برابر
< 0 یعنی شیء اول کوچکتره
> 0 یعنی شیء اول بزرگتره
مثال:
string a = "apple";
string b = "banana";
Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(a.CompareTo(b)); // -1
📌 نکتهی حرفهای: اگه میخوای فقط برابری رو بررسی کنی، == یا .Equals() کافیه. ولی اگه میخوای ترتیب یا مرتبسازی انجام بدی، .CompareTo() انتخاب درستیه.
❤2👍2🦄1
🧠 تفاوت بین readonly و const در سی شارپ — کنترل بهتر روی دادههای ثابت
اگه بخوای یه مقدار رو توی برنامه ت ثابت نگه داری، احتمالاً بین const و readonly شک میکنی. ولی تفاوتشون فقط توی اسم نیست—توی زمان مقداردهی و نوع استفاده فرق های مهمی دارن.
✅ const
مقدارش باید در زمان کامپایل مشخص باشه
فقط برای انواع پایه مثل int, string, double مناسبه
به صورت ضمنی static هست
نمیتونه مقدارش از بیرون کلاس یا در زمان اجرا تغییر کنه
const double Pi = 3.14;
✅ readonly
مقدارش میتونه در زمان اجرا تعیین بشه
معمولاً توی سازندهی کلاس مقداردهی میشه
میتونه برای انواع پیچیدهتر هم استفاده بشه
فقط یک بار مقداردهی میشه و بعدش قابل تغییر نیست
readonly DateTime createdAt;
public MyClass() {
createdAt = DateTime.Now;
}
📌 نکتهی حرفهای: اگه مقدار از قبل مشخصه و هیچ وقت تغییر نمیکنه، const انتخاب خوبیه. اگه مقدار باید در زمان اجرا تعیین بشه ولی بعدش ثابت بمونه، از readonly استفاده کن.
اگه بخوای یه مقدار رو توی برنامه ت ثابت نگه داری، احتمالاً بین const و readonly شک میکنی. ولی تفاوتشون فقط توی اسم نیست—توی زمان مقداردهی و نوع استفاده فرق های مهمی دارن.
✅ const
مقدارش باید در زمان کامپایل مشخص باشه
فقط برای انواع پایه مثل int, string, double مناسبه
به صورت ضمنی static هست
نمیتونه مقدارش از بیرون کلاس یا در زمان اجرا تغییر کنه
const double Pi = 3.14;
✅ readonly
مقدارش میتونه در زمان اجرا تعیین بشه
معمولاً توی سازندهی کلاس مقداردهی میشه
میتونه برای انواع پیچیدهتر هم استفاده بشه
فقط یک بار مقداردهی میشه و بعدش قابل تغییر نیست
readonly DateTime createdAt;
public MyClass() {
createdAt = DateTime.Now;
}
📌 نکتهی حرفهای: اگه مقدار از قبل مشخصه و هیچ وقت تغییر نمیکنه، const انتخاب خوبیه. اگه مقدار باید در زمان اجرا تعیین بشه ولی بعدش ثابت بمونه، از readonly استفاده کن.
❤3👍3💅1
🧱 تفاوت بین class و struct در سی شارپ — انتخاب درست برای طراحی بهتر
اگه بخوای یه نوع دادهی جدید بسازی، معمولاً بین class و struct باید انتخاب کنی. ولی این انتخاب فقط ظاهری نیست—تأثیر زیادی روی عملکرد و رفتار برنامه ت داره.
✅ class
Reference Type
در حافظهی Heap ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، فقط آدرسش منتقل میشه
میتونه دارای سازنده، وراثت، و رفتار پیچیده باشه
✅ struct
Value Type
در حافظهی Stack ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، یه کپی کامل ساخته میشه
سبک تره، ولی محدودتر: نمیتونه از کلاس دیگه ارث بری کنه
مثال:
struct Point {
public int X;
public int Y;
}
class Person {
public string Name;
public int Age;
}
📌 نکتهی حرفهای: اگه نوع داده ت ساده، سبک، و بدون رفتار پیچیده ست (مثل مختصات یا رنگ)، از struct استفاده کن. اگه نیاز به انعطاف، وراثت، یا مدیریت حافظه داری، class انتخاب بهتریه.
اگه بخوای یه نوع دادهی جدید بسازی، معمولاً بین class و struct باید انتخاب کنی. ولی این انتخاب فقط ظاهری نیست—تأثیر زیادی روی عملکرد و رفتار برنامه ت داره.
✅ class
Reference Type
در حافظهی Heap ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، فقط آدرسش منتقل میشه
میتونه دارای سازنده، وراثت، و رفتار پیچیده باشه
✅ struct
Value Type
در حافظهی Stack ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، یه کپی کامل ساخته میشه
سبک تره، ولی محدودتر: نمیتونه از کلاس دیگه ارث بری کنه
مثال:
struct Point {
public int X;
public int Y;
}
class Person {
public string Name;
public int Age;
}
📌 نکتهی حرفهای: اگه نوع داده ت ساده، سبک، و بدون رفتار پیچیده ست (مثل مختصات یا رنگ)، از struct استفاده کن. اگه نیاز به انعطاف، وراثت، یا مدیریت حافظه داری، class انتخاب بهتریه.
❤3👍1👾1